23 USE mod_prism_def_partition_proto
24 USE mod_prism_get_proto
25 USE mod_prism_put_proto
72 CHARACTER(len = 8) :: name
99 USE wxios
, ONLY : wxios_context_init
107 INTEGER :: ierror, il_commlocal
108 INTEGER :: il_part_id
109 INTEGER,
DIMENSION(3) :: ig_paral
110 INTEGER,
DIMENSION(2) :: il_var_nodims
111 INTEGER,
DIMENSION(4) :: il_var_actual_shape
112 INTEGER :: il_var_type
114 CHARACTER (len = 6) :: clmodnam
115 CHARACTER (len = 20) :: modname =
'inicma'
116 CHARACTER (len = 80) :: abort_message
117 LOGICAL,
SAVE :: cpl_current_omp
124 WRITE(
lunout,*)
' ROUTINE INICMA'
125 WRITE(
lunout,*)
' **************'
139 cpl_current_omp = .
false.
140 CALL getin(
'cpl_current', cpl_current_omp)
214 CALL prism_init_comp_proto (comp_id, clmodnam, ierror)
216 IF (ierror .NE. prism_ok)
THEN
217 abort_message=
' Probleme init dans prism_init_comp '
220 WRITE(
lunout,*)
'inicma : init psmile ok '
224 CALL prism_get_localcomm_proto (il_commlocal, ierror)
229 ig_paral(2) = (jj_begin-1)*
nbp_lon+ii_begin-1
230 ig_paral(3) = (jj_end*
nbp_lon+ii_end) - (jj_begin*
nbp_lon+ii_begin) + 1
232 IF (mpi_rank==mpi_size-1) ig_paral(3)=ig_paral(3)+
nbp_lon-1
233 WRITE(
lunout,*) mpi_rank,
'ig_paral--->',ig_paral(2),ig_paral(3)
236 CALL prism_def_partition_proto (il_part_id, ig_paral, ierror)
238 IF (ierror .NE. prism_ok)
THEN
239 abort_message=
' Probleme dans prism_def_partition '
242 WRITE(
lunout,*)
'inicma : decomposition domaine psmile ok '
248 il_var_actual_shape(1) = 1
249 il_var_actual_shape(2) =
nbp_lon
250 il_var_actual_shape(3) = 1
251 il_var_actual_shape(4) =
nbp_lat
253 il_var_type = prism_real
262 il_var_nodims, prism_in, il_var_actual_shape, il_var_type, &
264 IF (ierror .NE. prism_ok)
THEN
265 WRITE(
lunout,*)
'inicma : Problem with prism_def_var_proto for field : ',&
267 abort_message=
' Problem in call to prism_def_var_proto for fields to receive'
280 il_var_nodims, prism_out, il_var_actual_shape, il_var_type, &
282 IF (ierror .NE. prism_ok)
THEN
283 WRITE(
lunout,*)
'inicma : Problem with prism_def_var_proto for field : ',&
285 abort_message=
' Problem in call to prism_def_var_proto for fields to send'
294 CALL prism_enddef_proto(ierror)
295 IF (ierror .NE. prism_ok)
THEN
296 abort_message=
' Problem in call to prism_endef_proto'
299 WRITE(
lunout,*)
'inicma : endef psmile ok '
303 CALL wxios_context_init()
308 END SUBROUTINE inicma
314 SUBROUTINE fromcpl(ktime, tab_get)
324 INTEGER,
INTENT(IN) :: ktime
328 REAL,
DIMENSION(nbp_lon, jj_nb,maxrecv),
INTENT(OUT) :: tab_get
333 INTEGER :: istart,iend
334 CHARACTER (len = 20) :: modname =
'fromcpl'
335 CHARACTER (len = 80) :: abort_message
336 REAL,
DIMENSION(nbp_lon*jj_nb) :: field
340 WRITE (
lunout,*)
'Fromcpl: Reading fields from CPL, ktime=',ktime
344 IF (is_south_pole)
THEN
347 iend=(jj_end-jj_begin)*
nbp_lon+ii_end
353 CALL prism_get_proto(
inforecv(
i)%nid, ktime, field(istart:iend), ierror)
354 tab_get(:,:,
i) = reshape(field(:),(/
nbp_lon,jj_nb/))
356 IF (ierror .NE. prism_ok .AND. ierror.NE.prism_recvd .AND. &
357 ierror.NE.prism_fromrest &
358 .AND. ierror.NE.prism_input .AND. ierror.NE.prism_recvout &
359 .AND. ierror.NE.prism_fromrestout)
THEN
360 WRITE (
lunout,*)
'Error with receiving filed : ',
inforecv(
i)%name, ktime
361 abort_message=
' Problem in prism_get_proto '
368 END SUBROUTINE fromcpl
374 SUBROUTINE intocpl(ktime, last, tab_put)
386 INTEGER,
INTENT(IN) :: ktime
387 LOGICAL,
INTENT(IN) :: last
388 REAL,
DIMENSION(nbp_lon, jj_nb, maxsend),
INTENT(IN) :: tab_put
393 INTEGER :: istart,iend
394 INTEGER :: wstart,wend
396 REAL,
DIMENSION(nbp_lon*jj_nb) :: field
397 CHARACTER (len = 20),
PARAMETER :: modname =
'intocpl'
398 CHARACTER (len = 80) :: abort_message
404 WRITE(
lunout,*)
'Intocpl: sending fields to CPL, ktime= ', ktime
405 WRITE(
lunout,*)
'last = ', last
410 IF (is_south_pole)
THEN
413 iend=(jj_end-jj_begin)*
nbp_lon+ii_end
419 IF (is_north_pole) wstart=istart+
nbp_lon-1
420 IF (is_south_pole) wend=iend-
nbp_lon+1
424 field = reshape(tab_put(:,:,
i),(/
nbp_lon*jj_nb/))
436 field = reshape(tab_put(:,:,
i),(/
nbp_lon*jj_nb/))
437 CALL prism_put_proto(
infosend(
i)%nid, ktime, field(istart:iend), ierror)
439 IF (ierror .NE. prism_ok .AND. ierror.NE.prism_sent .AND. ierror.NE.prism_torest &
440 .AND. ierror.NE.prism_loctrans .AND. ierror.NE.prism_output .AND. &
441 ierror.NE.prism_sentout .AND. ierror.NE.prism_torestout)
THEN
443 abort_message=
' Problem in prism_put_proto '
456 CALL prism_terminate_proto(ierror)
457 IF (ierror .NE. prism_ok)
THEN
458 abort_message=
' Problem in prism_terminate_proto '
465 END SUBROUTINE intocpl
type(fld_cpl), dimension(maxsend), save, public infosend
integer, parameter ids_tauxxu
integer, parameter idr_cureny
integer, parameter idr_curenx
integer, parameter ids_tauyyv
integer, parameter idr_oceco2
integer, parameter ids_tauxxv
integer, parameter ids_dflxdt
integer, parameter ids_nsftot
character(len=6), save version_ocean
integer, parameter ids_shfice
type(fld_cpl), dimension(maxrecv), save, public inforecv
integer, parameter ids_tauzzv
logical, save cpl_current
!$Id klon initialisation mois suivants day_rain itap ENDIF!Calcul fin de nday_rain calcul nday_rain itap DO i
integer, parameter idr_curenz
integer, parameter ids_atmco2
integer, parameter ids_toteva
integer, parameter ids_totrai
integer, parameter ids_tauyyu
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
integer, parameter maxsend
integer, parameter maxrecv
integer, parameter ids_icevap
integer, parameter ids_rivflu
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
integer, parameter ids_nsfice
integer, parameter ids_shftot
integer, parameter ids_ocevap
integer, parameter idr_icealw
integer, parameter ids_runcoa
integer, parameter ids_taumod
integer, parameter ids_windsp
subroutine writefield_phy(name, Field, ll)
integer, parameter idr_icecov
integer, parameter idr_sisutw
subroutine abort_physic(modname, message, ierr)
integer, parameter ids_liqrun
integer, parameter ids_tauzzu
logical, public carbon_cycle_cpl
integer, parameter idr_icetem
integer, parameter ids_nsfoce
integer, parameter ids_totsno
logical, save is_sequential
integer, parameter ids_shfoce
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
integer, parameter ids_calvin