WAVEWATCH III  beta 0.0.1
w3oacpmd.F90
Go to the documentation of this file.
1 #include "w3macros.h"
2 !/ ------------------------------------------------------------------- /
3 MODULE w3oacpmd
4  !/
5  !/ +-----------------------------------+
6  !/ | WAVEWATCH III NOAA/NCEP |
7  !/ | A. Thevenin |
8  !/ | FORTRAN 90 |
9  !/ | Last update : 22-Mar-2021 |
10  !/ +-----------------------------------+
11  !/
12  !/ July-2013 : Origination. ( version 4.18 )
13  !/ For upgrades see subroutines.
14  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
15  !/ 25-Sep-2020 : Coupling at T+0 support ( version 7.10 )
16  !/ 22-Mar-2021 : Adds extra coupling fields ( version 7.13 )
17  !/
18  !/ Copyright 2009-2012 National Weather Service (NWS),
19  !/ National Oceanic and Atmospheric Administration. All rights
20  !/ reserved. WAVEWATCH III is a trademark of the NWS.
21  !/ No unauthorized use without permission.
22  !/
23  ! 1. Purpose :
24  !
25  ! Generic Module used for coupling applications with OASIS3-MCT
26  !
27  ! 2. Variables and types :
28  !
29  ! 3. Subroutines and functions :
30  !
31  ! Name Type Scope Description
32  ! ----------------------------------------------------------------
33  ! CPL_OASIS_INIT Subr. Public Initialize the coupling
34  ! CPL_OASIS_GRID Subr. Public Grids defintion
35  ! CPL_OASIS_DEFINE Subr. Public Partition definition
36  ! CPL_OASIS_SND Subr. Public Send fields to ocean/atmos model
37  ! CPL_OASIS_RCV Subr. Public Receive fields from ocean/atmos model
38  ! CPL_OASIS_FINALIZE Subr. Public Finalize the coupling
39  ! ----------------------------------------------------------------
40  !
41  ! 4. Subroutines and functions used :
42  !
43  ! Name Type Module Description
44  ! --------------------------------------------------------------------
45  ! GET_LIST_EXCH_FIELD Subr. W3OACPMD List of the exchanged fields
46  ! STRSPLIT Subr. W3SERVMD Splits string into words
47  ! --------------------------------------------------------------------
48  !
49  ! 5. Remarks
50  !
51  ! Module adapted from WRF-OASIS routine implemented by
52  ! Sebastien Masson (IPSL), Guillaume Samson (Legos) and Eric Maisonnave (Cerfacs)
53  !
54  ! 6. Switches :
55  ! 7. Source code :
56  !
57  !/ ------------------------------------------------------------------- /
58  !
59  USE mod_oasis ! OASIS3-MCT module
60  !
61  IMPLICIT NONE
62  PRIVATE
63  !
64  INTEGER :: IL_COMPID ! Component model ID returned by oasis_init_comp
65  CHARACTER(LEN=6) :: CL_MODEL_NAME = 'wwatch' ! Model name (same as in namcouple)
66  INTEGER :: IL_ERR ! Return error code
67  INTEGER, PUBLIC :: il_nb_rcv, il_nb_snd ! Number of coupling fields
68  INTEGER, PARAMETER :: ip_maxfld=50 ! Maximum number of coupling fields
69  INTEGER :: nnodes ! Total numbers of cell in the grid
70  !
71  TYPE, PUBLIC :: cpl_field ! Type for coupling field information
72  CHARACTER(LEN = 8) :: cl_field_name ! Name of the coupling field
73  INTEGER :: il_field_id ! Field ID
74  END TYPE cpl_field
75  !
76  TYPE(cpl_field), DIMENSION(IP_MAXFLD), PUBLIC :: rcv_fld, snd_fld ! Coupling fields
77  !
78  INTEGER, PUBLIC :: id_oasis_time=0 ! time counter for coupling exchanges
79  !
80  LOGICAL, PUBLIC :: cplt0 ! Flag for coupling at T+0
81  !
82  ! * Accessibility
83  PUBLIC cpl_oasis_init
84  PUBLIC cpl_oasis_grid
85  PUBLIC cpl_oasis_define
86  PUBLIC cpl_oasis_snd
87  PUBLIC cpl_oasis_rcv
88  PUBLIC cpl_oasis_finalize
89  !
90 CONTAINS
91  !/ ------------------------------------------------------------------- /
92  SUBROUTINE cpl_oasis_init(ID_LCOMM)
93  !/
94  !/ +-----------------------------------+
95  !/ | WAVEWATCH III NOAA/NCEP |
96  !/ | A. Thevenin |
97  !/ | FORTRAN 90 |
98  !/ | Last update : April-2016 |
99  !/ +-----------------------------------+
100  !/
101  !/ Jul-2013 : Origination. ( version 4.18 )
102  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
103  !/
104  ! 1. Purpose :
105  !
106  ! Initialize the coupling
107  !
108  ! 2. Method :
109  ! 3. Parameters :
110  !
111  ! Parameter list
112  ! ----------------------------------------------------------------
113  ! ID_LCOMM Int. O MPI communicator
114  ! ----------------------------------------------------------------
115  !
116  ! 4. Subroutines used :
117  !
118  ! 5. Called by :
119  !
120  ! Name Type Module Description
121  ! ----------------------------------------------------------------
122  ! WW3_SHEL Prog. - Main program
123  ! ----------------------------------------------------------------
124  !
125  ! 6. Error messages :
126  ! 7. Remarks :
127  ! 8. Structure :
128  ! 9. Switches :
129  ! 10. Source code :
130  !
131  !/ ------------------------------------------------------------------- /
132  !
133  ! * Argument
134  INTEGER, INTENT(OUT) :: id_lcomm ! Model local communicator
135  !
136  !----------------------------------------------------------------------
137  ! * Executable part
138  !
139  !! Initialize the coupling
140  CALL oasis_init_comp(il_compid, cl_model_name, il_err)
141  IF (il_err /= 0) THEN
142  CALL oasis_abort(il_compid, 'CPL_OASIS_INIT', 'Problem during oasis_init_comp')
143  ENDIF
144  !
145  !! Get the value of a local MPI communicator to be used by WW3 for its internal parallelisation
146  CALL oasis_get_localcomm(id_lcomm, il_err)
147  IF (il_err /= 0) THEN
148  CALL oasis_abort(il_compid, 'CPL_OASIS_INIT', 'Problem during oasis_get_localcomm')
149  ENDIF
150  !
151  !/ ------------------------------------------------------------------- /
152  END SUBROUTINE cpl_oasis_init
153  !/ ------------------------------------------------------------------- /
154  SUBROUTINE cpl_oasis_grid(LD_MASTER,ID_LCOMM)
155  !/
156  !/ +-----------------------------------+
157  !/ | WAVEWATCH III NOAA/NCEP |
158  !/ | A. Thevenin |
159  !/ | V. Garnier |
160  !/ | M. Accensi |
161  !/ | FORTRAN 90 |
162  !/ | Last update : April-2016 |
163  !/ +-----------------------------------+
164  !/
165  !/ Jul-2013 : Origination. ( version 4.18 )
166  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
167  !/ Sept-2016 : Correct bug MPI (J. Pianezze) ( version 5.12 )
168  !/
169  ! 1. Purpose :
170  !
171  ! Grid data file definition
172  !
173  ! 2. Method :
174  ! 3. Parameters :
175  !
176  ! Parameter list
177  ! ----------------------------------------------------------------
178  ! LD_MASTER Bool. I Flag to know the master process
179  ! ID_LCOMM Int. I MPI communicator
180  ! ----------------------------------------------------------------
181  !
182  ! 4. Subroutines used :
183  ! 5. Called by :
184  !
185  ! Name Type Module Description
186  ! ----------------------------------------------------------------
187  ! WW3_SHEL Prog. - Main program
188  ! ----------------------------------------------------------------
189  !
190  ! 6. Error messages :
191  ! 7. Remarks :
192  ! 8. Structure :
193  ! 9. Switches :
194  ! 10. Source code :
195  !
196  !/ ------------------------------------------------------------------- /
197  !
198  USE constants, ONLY: radius, dera
199  USE w3gdatmd, ONLY: nx, ny, flagll, xgrd, ygrd, mapsta, &
200  & hpfac, hqfac, gtype, &
202 #ifdef W3_SMC
203  USE w3gdatmd, ONLY: nsea, x0, y0, mrfct, sx, sy, ijkcel
204 #endif
205 #ifdef W3_MPI
206  include "mpif.h"
207 #endif
208  !
209  !/ ------------------------------------------------------------------- /
210  !/ Parameter list
211  !/
212  LOGICAL, INTENT(IN) :: ld_master ! MASTER process or not
213  INTEGER, INTENT(IN) :: id_lcomm ! Model local communicator
214  !
215  !/ ------------------------------------------------------------------- /
216  !/ Local parameters
217  !/
218  INTEGER, ALLOCATABLE :: mask(:,:)
219  INTEGER :: i, ix, iy, nxw, nxe, nys, nyn, inode, ierr_mpi
220  REAL, ALLOCATABLE :: lon(:,:),lat(:,:),area(:,:), &
221  corlon(:,:,:),corlat(:,:,:)
222  REAL :: factor
223 #ifdef W3_SMC
224  REAL :: dlon, dlat
225 #endif
226  !/ ------------------------------------------------------------------- /
227  !
228  IF (ld_master) THEN
229  !
230  !
231  ! 0. Create grids file
232  ! --------------------------------
233  CALL oasis_start_grids_writing(ierr_mpi)
234  !
235  ! 1. Get the lat/lon/corners,areas and masks
236  ! -------------------------------------------
237  IF (gtype .EQ. rlgtype .OR. gtype .EQ. clgtype) THEN
238  !
239  IF (flagll) THEN
240  factor = 1.
241  ELSE
242  factor = 1. / (radius * dera)
243  END IF
244  !
245  ! 1.1. regular and curvilinear grids
246  ! ----------------------------------
247  nnodes = nx*ny
248  nxw=1
249  nxe=nx
250  nys=1
251  nyn=ny
252  !
253  ! lat/lon
254  ALLOCATE ( lon(nnodes,1), lat(nnodes,1) )
255  i = 0
256  DO iy = nys, nyn
257  DO ix = nxw, nxe
258  i = i+1
259  lon(i,1)=xgrd(iy,ix)*factor
260  lat(i,1)=ygrd(iy,ix)*factor
261  END DO
262  END DO
263  !
264  ! areas, corners
265  ALLOCATE ( area(nnodes,1), corlon(nnodes,1,4), corlat(nnodes,1,4) )
266  i = 0
267  DO iy = nys, nyn
268  DO ix = nxw, nxe
269  i = i+1
270  corlon(i,1,1)=lon(i,1)+hpfac(iy,ix)/2.*factor
271  corlon(i,1,2)=lon(i,1)-hpfac(iy,ix)/2.*factor
272  corlon(i,1,3)=lon(i,1)-hpfac(iy,ix)/2.*factor
273  corlon(i,1,4)=lon(i,1)+hpfac(iy,ix)/2.*factor
274  corlat(i,1,1)=lat(i,1)+hqfac(iy,ix)/2.*factor
275  corlat(i,1,2)=lat(i,1)+hqfac(iy,ix)/2.*factor
276  corlat(i,1,3)=lat(i,1)-hqfac(iy,ix)/2.*factor
277  corlat(i,1,4)=lat(i,1)-hqfac(iy,ix)/2.*factor
278  area(i,1)=hpfac(iy,ix)*hqfac(iy,ix)
279  END DO
280  END DO
281  !
282  ! Model grid mask
283  ALLOCATE ( mask(nnodes,1) )
284  i = 0
285  DO iy = nys, nyn
286  DO ix = nxw, nxe
287  i = i+1
288  ! Get the mask : 0 - sea / 1 - open boundary cells (the land is already excluded)
289  IF ((mapsta(iy,ix) .EQ. 1)) THEN
290  mask(i,1) = 0
291  ELSE
292  mask(i,1) = 1
293  END IF
294  END DO
295  END DO
296 #ifdef W3_SMC
297  ELSE IF( gtype .EQ. smctype ) THEN
298  !
299  ! 1.2. SMC grids
300  ! ----------------------------------
301  nnodes = nsea
302  !
303  ! Calculate the smallest grid cell increments depending on the number of SMC levels
304  dlon = sx / mrfct
305  dlat = sy / mrfct
306  !
307  ALLOCATE ( lon(nnodes,1), lat(nnodes,1) )
308  ALLOCATE ( area(nnodes,1), corlon(nnodes,1,4), corlat(nnodes,1,4) )
309  ALLOCATE ( mask(nnodes,1) )
310  DO i=1, nnodes
311  ! lat/lon
312  lon(i,1) = x0 + (ijkcel(1,i) + ijkcel(3,i)*0.5)*dlon
313  lat(i,1) = y0 + (ijkcel(2,i) + ijkcel(4,i)*0.5)*dlat
314  ! corners
315  corlon(i,1,1) = x0 + ijkcel(1,i)*dlon
316  corlon(i,1,2) = x0 + (ijkcel(1,i) + ijkcel(3,i))*dlon
317  corlon(i,1,3) = corlon(i,1,2)
318  corlon(i,1,4) = corlon(i,1,1)
319  corlat(i,1,1) = y0 + ijkcel(2,i)*dlat
320  corlat(i,1,2)=corlat(i,1,1)
321  corlat(i,1,3) = y0 + (ijkcel(2,i) + ijkcel(4,i))*dlat
322  corlat(i,1,4)=corlat(i,1,3)
323  ! areas
324  area(i,1) = 0.25 * ijkcel(3,i)*dlon * ijkcel(4,i)*dlat
325  ! Model grid mask
326  mask(i,1) = 1
327  ENDDO
328 #endif
329  !
330  ELSE
331  !
332  ! 1.3. Unstructured grids
333  ! ----------------------------------
334  WRITE(*,*) 'TO BE IMPLEMENT FOR UNSTRUCTURED GRIDS'
335  stop
336  END IF
337  !
338  CALL oasis_write_grid('ww3t',nnodes,1,lon,lat)
339  CALL oasis_write_corner('ww3t',nnodes,1,4,corlon,corlat)
340  CALL oasis_write_area('ww3t',nnodes,1,area)
341  CALL oasis_write_mask('ww3t',nnodes,1,mask)
342  !
343  ! 2. Terminate grid writing
344  ! -------------------------
345  CALL oasis_terminate_grids_writing()
346  !
347  DEALLOCATE(lon)
348  DEALLOCATE(lat)
349  DEALLOCATE(corlon)
350  DEALLOCATE(corlat)
351  DEALLOCATE(area)
352  DEALLOCATE(mask)
353  !
354  ENDIF
355  !
356 #ifdef W3_MPI
357  CALL mpi_bcast(nnodes,1,mpi_integer,0,id_lcomm,ierr_mpi)
358 #endif
359  !
360  !/ ------------------------------------------------------------------- /
361  END SUBROUTINE cpl_oasis_grid
362  !/ ------------------------------------------------------------------- /
363  SUBROUTINE cpl_oasis_define(NDSO,RCV_STR,SND_STR)
364  !/
365  !/ +-----------------------------------+
366  !/ | WAVEWATCH III NOAA/NCEP |
367  !/ | A. Thevenin |
368  !/ | V. Garnier |
369  !/ | M. Accensi |
370  !/ | FORTRAN 90 |
371  !/ | Last update : 08-Jun-2018 |
372  !/ +-----------------------------------+
373  !/
374  !/ Jul-2013 : Origination. ( version 4.18 )
375  !/ April-2016 : Add coupling for unstructured grids ( version 5.07 )
376  !/ (R. Baraille & J. Pianezze)
377  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
378  !/ 08-Jun-2018 : use INIT_GET_ISEA ( version 6.04 )
379  !/
380  ! 1. Purpose :
381  !
382  ! Partition definition and coupling fields declaration
383  !
384  ! 2. Method :
385  ! 3. Parameters :
386  !
387  ! Parameter list
388  ! ----------------------------------------------------------------
389  ! NDSO Int. I Id. of the output file
390  ! RCV_STR Char. I Name of receive fields
391  ! SND_STR Char. I Name of send fields
392  ! ----------------------------------------------------------------
393  !
394  ! 4. Subroutines used :
395  !
396  ! Name Type Module Description
397  ! ----------------------------------------------------------------
398  ! GET_LIST_EXCH_FIELD Subr. W3OACPMD List of the exchanged fields
399  ! ----------------------------------------------------------------
400  !
401  ! 5. Called by :
402  !
403  ! Name Type Module Description
404  ! ----------------------------------------------------------------
405  ! WW3_SHEL Prog. - Main program
406  ! ----------------------------------------------------------------
407  !
408  ! 6. Error messages :
409  ! 7. Remarks :
410  ! 8. Structure :
411  ! 9. Switches :
412  ! 10. Source code :
413  !
414  !/ ------------------------------------------------------------------- /
415  !
416  USE w3gdatmd, ONLY: nseal,nsea, nx, ny, mapsta, mapsf, gtype, &
418  USE w3odatmd, ONLY: naproc, iaproc
419  USE w3parall, ONLY : init_get_isea
420  !
421  !/ ------------------------------------------------------------------- /
422  !/ Parameter list
423  !/
424  INTEGER, INTENT(IN) :: ndso
425  CHARACTER(LEN=1024), INTENT(IN) :: rcv_str,snd_str
426  !/
427  !/ ------------------------------------------------------------------- /
428  !/ Local parameters
429  !/
430  INTEGER :: ib_i,i
431  INTEGER :: il_part_id ! PartitionID
432  INTEGER, ALLOCATABLE, DIMENSION(:) :: ila_paral ! Description of the local partition in the global index space
433  INTEGER, DIMENSION(4) :: ila_shape ! Vector giving the min & max index for each dim of the fields
434  INTEGER, DIMENSION(2) :: ila_var_nodims ! rank of fields & number of bundles (1 with OASIS3-MCT)
435  INTEGER :: isea, jsea, ix, iy
436  INTEGER :: nhxw, nhxe, nhys, nhyn ! size of the halo at the western, eastern, southern, northern boundaries
437  LOGICAL :: ll_mpi_file ! to check if there an mpi.txt file for domain decompasition
438  !/
439  !/ ------------------------------------------------------------------- /
440  !/ Executable part
441  !/
442  !
443  IF (gtype .EQ. rlgtype .OR. gtype .EQ. clgtype) THEN
444  !
445  ! 1.1. regular and curvilinear grids
446  ! ----------------------------------
447  nhxw = 1 ; nhxe = nx ; nhys = 1 ; nhyn = ny
448  nhxw = nhxw - 1
449  nhxe = nx - nhxe
450  nhys = nhys - 1
451  nhyn = ny - nhyn
452  !
453  ALLOCATE(ila_paral(2+nseal*2))
454  !
455  ! * Define the partition : OASIS ORANGE partition
456  ila_paral(1) = 3
457  !
458  ! * total number of segments of the global domain
459  ila_paral(2) = nseal
460  !
461  DO jsea=1, nseal
462  CALL init_get_isea(isea,jsea)
463 
464  ix = mapsf(isea,1)
465  iy = mapsf(isea,2)
466  ila_paral(jsea*2+1) = (iy - nhyn -1)*(nx - nhxe - nhxw) + (ix - nhxw - 1)
467  ila_paral(jsea*2+2) = 1
468  END DO
469 #ifdef W3_SMC
470  ELSE IF( gtype .EQ. smctype ) THEN
471  !
472  ! 1.2. SMC grids
473  ! ----------------------------------
474  ALLOCATE(ila_paral(2+nseal))
475  !
476  ! * Define the partition : OASIS POINTS partition
477  ila_paral(1) = 4
478  !
479  ! * total number of segments of the global domain
480  ila_paral(2) = nseal
481  !
482  DO jsea=1, nseal
483  ila_paral(jsea+2) = iaproc + (jsea-1)*naproc
484  ENDDO
485 #endif
486  !
487  ELSE
488  !
489  ! 1.3. Unstructured grids
490  ! ----------------------------------
491  WRITE(*,*) 'TO BE VERIFIED FOR UNSTRUCTURED GRIDS'
492  stop
493  !
494  DO jsea=1,nseal
495  ila_paral(jsea*2+1) = (iaproc-1) + (jsea-1)*naproc
496  ila_paral(jsea*2+2) = 1
497  END DO
498  !
499  ENDIF
500  !
501  ! 2. Partition definition
502  ! ----------------------------------
503  CALL oasis_def_partition(il_part_id, ila_paral,il_err,nnodes)
504  IF(il_err /= 0) THEN
505  CALL oasis_abort(il_compid, 'CPL_OASIS_DEFINE', 'Problem during oasis_def_partition')
506  ENDIF
507  !
508  ! 3. Coupling fields declaration
509  ! ----------------------------------
510  ila_shape(:) = (/1, nseal, 1, 1 /)
511  !
512  ila_var_nodims(1) = 2 ! rank of fields array
513  ila_var_nodims(2) = 1 ! always 1 with OASIS3-MCT 2.0
514  !
515  CALL get_list_exch_field(ndso, rcv_fld, snd_fld, il_nb_rcv, il_nb_snd, rcv_str, snd_str)
516  !
517  ! 3.1 Send coupling fields
518  ! ----------------------------------
519  DO ib_i = 1, il_nb_snd
520  CALL oasis_def_var (snd_fld(ib_i)%IL_FIELD_ID &
521  & , snd_fld(ib_i)%CL_FIELD_NAME &
522  & , il_part_id &
523  & , ila_var_nodims &
524  & , oasis_out &
525  & , ila_shape &
526  & , oasis_real &
527  & , il_err )
528 
529  IF (il_err /= 0) THEN
530  CALL oasis_abort(il_compid, 'CPL_OASIS_DEFINE', 'Problem during oasis_def_var')
531  ENDIF
532  ENDDO
533  !
534  ! 3.2 Received coupling fields
535  ! ----------------------------------
536  DO ib_i = 1, il_nb_rcv
537  CALL oasis_def_var (rcv_fld(ib_i)%IL_FIELD_ID &
538  & , rcv_fld(ib_i)%CL_FIELD_NAME &
539  & , il_part_id &
540  & , ila_var_nodims &
541  & , oasis_in &
542  & , ila_shape &
543  & , oasis_real &
544  & , il_err )
545  !
546  IF (il_err /= 0) THEN
547  CALL oasis_abort(il_compid, 'CPL_OASIS_DEFINE', 'Problem during oasis_def_var')
548  ENDIF
549  ENDDO
550  !
551  ! 4. End of definition phase
552  ! ----------------------------------
553  CALL oasis_enddef(il_err)
554 
555  IF (il_err /= 0) THEN
556  CALL oasis_abort(il_compid, 'CPL_OASIS_DEFINE', 'Problem during oasis_enddef')
557  ENDIF
558  !
559  !/ ------------------------------------------------------------------- /
560  END SUBROUTINE cpl_oasis_define
561  !/ ------------------------------------------------------------------- /
562  SUBROUTINE cpl_oasis_snd(ID_NB, ID_TIME, RDA_FIELD, LD_ACTION)
563  !/
564  !/ +-----------------------------------+
565  !/ | WAVEWATCH III NOAA/NCEP |
566  !/ | A. Thevenin |
567  !/ | FORTRAN 90 |
568  !/ | Last update : April-2016 |
569  !/ +-----------------------------------+
570  !/
571  !/ Jul-2013 : Origination. ( version 4.18 )
572  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
573  !/
574  ! 1. Purpose :
575  !
576  ! In the model time step loop, each process sends its parts of the coupling field
577  !
578  ! 2. Method :
579  ! 3. Parameters :
580  !
581  ! Parameter list
582  ! ----------------------------------------------------------------
583  ! ID_NB Int. I Number of the field to be send
584  ! ID_TIME Int. I Atmosphere time-step in seconds
585  ! RDA_FIELD Real I Coupling field array to be send
586  ! LD_ACTION Bool. O Action performed
587  ! ----------------------------------------------------------------
588  !
589  ! 4. Subroutines used :
590  ! 5. Called by :
591  !
592  ! Name Type Module Description
593  ! ----------------------------------------------------------------
594  ! SND_FIELDS_TO_ATMOS Subr. W3AGCMMD Send fields to atmos. model
595  ! SND_FIELDS_TO_OCEAN Subr. W3OGCMMD Send fields to ocean model
596  ! SND_FIELDS_TO_ICE Subr. W3IGCMMD Send fields to ice model
597  ! ----------------------------------------------------------------
598  !
599  ! 6. Error messages :
600  ! 7. Remarks :
601  ! 8. Structure :
602  ! 9. Switches :
603  ! 10. Source code :
604  !
605  !/ ------------------------------------------------------------------- /
606  !/ Parameter list
607  !/
608  INTEGER, INTENT(IN) :: id_nb ! Number of the field to be send
609  INTEGER, INTENT(IN) :: id_time ! Atmosphere time-step in seconds
610  REAL(kind=8), dimension(:,:), INTENT(IN) :: rda_field ! Coupling field array to be send
611  LOGICAL, INTENT(OUT) :: ld_action ! Action performed
612  !/
613  !/ ------------------------------------------------------------------- /
614  !/ Local parameters
615  !/
616  INTEGER :: il_info ! OASIS3-MCT info argument
617  !/
618  !/ ------------------------------------------------------------------- /
619  !/ Executable part
620  !/
621  CALL oasis_put ( snd_fld(id_nb)%IL_FIELD_ID &
622  & , id_time &
623  & , rda_field &
624  & , il_info &
625  & )
626 
627  ld_action = il_info == oasis_sent .OR. il_info == oasis_torest .OR. &
628  & il_info == oasis_sentout .OR. il_info == oasis_torestout
629 
630  !/ ------------------------------------------------------------------- /
631  END SUBROUTINE cpl_oasis_snd
632  !/ ------------------------------------------------------------------- /
633  SUBROUTINE cpl_oasis_rcv(ID_NB, ID_TIME, RDA_FIELD, LD_ACTION)
634  !/
635  !/ +-----------------------------------+
636  !/ | WAVEWATCH III NOAA/NCEP |
637  !/ | A. Thevenin |
638  !/ | FORTRAN 90 |
639  !/ | Last update : April-2016 |
640  !/ +-----------------------------------+
641  !/
642  !/ Jul-2013 : Origination. ( version 4.18 )
643  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
644  !/
645  ! 1. Purpose :
646  !
647  ! In the model time step loop, each process receives its parts of the coupling field
648  !
649  ! 2. Method :
650  ! 3. Parameters :
651  !
652  ! Parameter list
653  ! ----------------------------------------------------------------
654  ! ID_NB Int. I Number of the field to be received
655  ! ID_TIME Int. I Ocean time-step in seconds
656  ! RDA_FIELD Real I Coupling field array to be received
657  ! LD_ACTION Bool. O Action performed
658  ! ----------------------------------------------------------------
659  !
660  ! 4. Subroutines used :
661  ! 5. Called by :
662  !
663  ! Name Type Module Description
664  ! ----------------------------------------------------------------
665  ! RCV_FIELDS_FROM_ATMOS Subr. W3AGCMMD Receive fields from atmos. model
666  ! RCV_FIELDS_FROM_OCEAN Subr. W3OGCMMD Receive fields from ocean model
667  ! RCV_FIELDS_FROM_ICE Subr. W3IGCMMD Receive fields from ice model
668  ! ----------------------------------------------------------------
669  !
670  ! 6. Error messages :
671  ! 7. Remarks :
672  ! 8. Structure :
673  ! 9. Switches :
674  ! 10. Source code :
675  !
676  !/ ------------------------------------------------------------------- /
677  !/ Parameter list
678  !/
679  INTEGER, INTENT(IN) :: id_nb ! Number of the field to be received
680  INTEGER, INTENT(IN) :: id_time ! Ocean time-step in seconds
681  REAL(kind=8), dimension(:,:), INTENT(OUT) :: rda_field ! Coupling field array to be received
682  LOGICAL, INTENT(OUT) :: ld_action ! Action performed
683  !/
684  !/ ------------------------------------------------------------------- /
685  !/ Local parameters
686  !/
687  INTEGER :: il_info ! OASIS3-MCT info argument
688  !/
689  !/ ------------------------------------------------------------------- /
690  !/ Executable part
691  !/
692  CALL oasis_get ( rcv_fld(id_nb)%IL_FIELD_ID &
693  & , id_time &
694  & , rda_field &
695  & , il_info &
696  & )
697  !
698  ld_action = il_info == oasis_recvd .OR. il_info == oasis_fromrest .OR. &
699  & il_info == oasis_recvout .OR. il_info == oasis_fromrestout
700  !
701  !/ ------------------------------------------------------------------- /
702  END SUBROUTINE cpl_oasis_rcv
703  !/ ------------------------------------------------------------------- /
704  SUBROUTINE cpl_oasis_finalize
705  !/
706  !/ +-----------------------------------+
707  !/ | WAVEWATCH III NOAA/NCEP |
708  !/ | A. Thevenin |
709  !/ | FORTRAN 90 |
710  !/ | Last update : April-2016 |
711  !/ +-----------------------------------+
712  !/
713  !/ Jul-2013 : Origination. ( version 4.18 )
714  !/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
715  !/
716  ! 1. Purpose :
717  !
718  ! Terminate the coupling
719  !
720  ! 2. Method :
721  ! 3. Parameters :
722  ! 4. Subroutines used :
723  ! 5. Called by :
724  !
725  ! Name Type Module Description
726  ! ----------------------------------------------------------------
727  ! WW3_SHEL Prog. - Main program
728  ! ----------------------------------------------------------------
729  !
730  ! 6. Error messages :
731  ! 7. Remarks :
732  ! 8. Structure :
733  ! 9. Switches :
734  ! 10. Source code :
735  !
736  !/ ------------------------------------------------------------------- /
737  !/ Executable part
738  !/
739  CALL oasis_terminate(il_err)
740  !
741  IF (il_err /= 0) THEN
742  CALL oasis_abort(il_compid, 'CPL_OASIS_FINALIZE', 'Problem during oasis_terminate')
743  ENDIF
744  !
745  !/ ------------------------------------------------------------------- /
746  END SUBROUTINE cpl_oasis_finalize
747  !/ ------------------------------------------------------------------- /
748  SUBROUTINE get_list_exch_field(NDSO, RCV, SND, ID_NB_RCV, ID_NB_SND, RCV_STR, SND_STR)
749  !/
750  !/ +-----------------------------------+
751  !/ | WAVEWATCH III NOAA/NCEP |
752  !/ | A. Thevenin |
753  !/ | V. Garnier |
754  !/ | A.C. Bennis |
755  !/ | FORTRAN 90 |
756  !/ | Last update : 22-Mar-2021 |
757  !/ +-----------------------------------+
758  !/
759  !/ Jul-2013 : Origination. ( version 4.18 )
760  !/ Mar-2014 : J. Pianezze (LPO) : Add atmospheric fields ( version 5.07 )
761  !/ Apr-2015 : M. Accensi (LPO) : Add fields selection ( version 5.07 )
762  !/ Apr-2016 : Add comments (J. Pianezze) ( version 5.07 )
763  !/ 22-Mar-2021 : Adds extra coupling fields ( version 7.13 )
764  !/
765  ! 1. Purpose :
766  !
767  ! Provides the list of coupling fields
768  !
769  ! 2. Method :
770  ! 3. Parameters :
771  !
772  ! Parameter list
773  ! ----------------------------------------------------------------
774  ! NDSO Int. I Id. of the output file
775  ! RCV Type I/O Received variables
776  ! SND Type I/O Send variables
777  ! ID_NB_RCV Int. I/O Number of received variables
778  ! ID_NB_SND Int. I/O Number of send variables
779  ! RCV_STR Char. I Name of the received variables
780  ! SND_STR Char I Name of the send variables
781  ! ----------------------------------------------------------------
782  !
783  ! 4. Subroutines used :
784  !
785  ! Name Type Module Description
786  ! ----------------------------------------------------------------
787  ! STRSPLIT Subr. W3SERVMD Splits string into words
788  ! ----------------------------------------------------------------
789  !
790  ! 5. Called by :
791  !
792  ! Name Type Module Description
793  ! ----------------------------------------------------------------
794  ! CPL_OASIS_DEFINE Subr. W3OACPMD Partition definition
795  ! ----------------------------------------------------------------
796  !
797  ! 6. Error messages :
798  ! 7. Remarks :
799  ! 8. Structure :
800  ! 9. Switches :
801  ! 10. Source code :
802  !
803  !/ ------------------------------------------------------------------- /
804  !
805  USE w3servmd, ONLY: strsplit
806  !
807  !/ ------------------------------------------------------------------- /
808  !/ Parameter list
809  !/
810  TYPE(cpl_field), DIMENSION(IP_MAXFLD), INTENT (INOUT) :: rcv, snd
811  INTEGER, INTENT(INOUT) :: id_nb_rcv, id_nb_snd
812  INTEGER, INTENT(IN) :: ndso
813  CHARACTER(LEN=1024), INTENT(IN) :: rcv_str, snd_str
814  !/
815  !/ ------------------------------------------------------------------- /
816  !/ Local parameters
817  !/
818  CHARACTER(LEN=100) :: out_names(50), teststr
819  INTEGER :: iout
820  !/
821  !/ ------------------------------------------------------------------- /
822  !/ Executable part
823  !/
824  !
825  ! 1. Coupling fields received by WW3
826  ! ----------------------------------
827  id_nb_rcv = 0
828  !
829  out_names(:)=''
830  CALL strsplit(rcv_str,out_names)
831  iout=0
832  DO WHILE (len_trim(out_names(iout+1)).NE.0)
833  teststr=out_names(iout+1)
834  SELECT CASE(trim(teststr(1:6)))
835  !
836  !
837  ! OCEAN MODEL VARIABLES
838  !
839 #ifdef W3_OASOCM
840  CASE('DRY')
841  ! wet-drying at the middle of the cell
842  id_nb_rcv=id_nb_rcv+1
843  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_OWDH'
844  !
845  ! wet-drying at u-location
846  id_nb_rcv=id_nb_rcv+1
847  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_OWDU'
848  !
849  ! wet-drying at v-location
850  id_nb_rcv=id_nb_rcv+1
851  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_OWDV'
852  !
853  CASE('SSH')
854  ! ssh : sea surface height (m)
855  id_nb_rcv=id_nb_rcv+1
856  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3__SSH'
857  !
858  CASE('CUR')
859  ! uz : sea surface zonal currents (m.s-1)
860  id_nb_rcv=id_nb_rcv+1
861  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_OSSU'
862  !
863  ! vz : sea surface meridional currents (m.s-1)
864  id_nb_rcv=id_nb_rcv+1
865  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_OSSV'
866 #endif
867  !
868 
869  !
870  ! ATMOSPHERE MODEL VARIABLES
871  !
872 #ifdef W3_OASACM
873  CASE('WND')
874  ! U10 : 10m u-wind speed (m.s-1)
875  id_nb_rcv=id_nb_rcv+1
876  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3__U10'
877  !
878  ! V10 : 10m v-wind speed (m.s-1)
879  id_nb_rcv=id_nb_rcv+1
880  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3__V10'
881  !
882  CASE('TAU')
883  ! UTAUA : u-momentum (m2.s-2)
884  id_nb_rcv=id_nb_rcv+1
885  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_UTAU'
886  !
887  ! V10 : v-momentum speed (m2.s-2)
888  id_nb_rcv=id_nb_rcv+1
889  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_VTAU'
890  !
891  CASE('RHO')
892  ! rhoa : air density (kg.m-3)
893  id_nb_rcv=id_nb_rcv+1
894  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3_RHOA'
895 #endif
896  !
897 
898  !
899  ! ICE MODEL VARIABLES
900  !
901 #ifdef W3_OASICM
902  CASE('IC1')
903  ! IC1 : ice thickness (m)
904  id_nb_rcv=id_nb_rcv+1
905  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3__IC1'
906  !
907  CASE('IC5')
908  ! ICEF : ice floe diameters (m)
909  id_nb_rcv=id_nb_rcv+1
910  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3__IC5'
911  !
912  CASE('ICE')
913  ! ICE : ice concentration (n.d)
914  id_nb_rcv=id_nb_rcv+1
915  rcv(id_nb_rcv)%CL_FIELD_NAME='WW3__ICE'
916 #endif
917  !
918 
919  CASE DEFAULT
920  WRITE (ndso,1001) trim(teststr(1:6))
921  END SELECT
922  iout=iout+1
923  END DO
924  !
925  ! 2. Coupling fields sent by WW3
926  ! ----------------------------------
927  id_nb_snd = 0
928  !
929  out_names(:)=''
930  CALL strsplit(snd_str,out_names)
931  iout=0
932  DO WHILE (len_trim(out_names(iout+1)).NE.0)
933  teststr=out_names(iout+1)
934  SELECT CASE(trim(teststr(1:6)))
935  !
936  !
937  ! OCEAN MODEL VARIABLES
938  !
939 #ifdef W3_OASOCM
940  CASE('OHS')
941  ! Significant wave height (m)
942  id_nb_snd = id_nb_snd +1
943  snd(id_nb_snd)%CL_FIELD_NAME='WW3__OHS'
944  !
945  CASE('DRY')
946  ! mask to manage wet-drying
947  id_nb_snd = id_nb_snd +1
948  snd(id_nb_snd)%CL_FIELD_NAME='WW3_ODRY'
949  !
950  CASE('T0M1')
951  ! T0M1 / wave_t0m1 : mean period (s)
952  id_nb_snd = id_nb_snd +1
953  snd(id_nb_snd)%CL_FIELD_NAME='WW3_T0M1'
954  !
955  CASE('T01')
956  ! T01 / wave_t01 : mean period (s)
957  id_nb_snd = id_nb_snd +1
958  snd(id_nb_snd)%CL_FIELD_NAME='WW3__T01'
959  !
960  CASE('DIR')
961  ! THM / wave_thm : cosinus of mean direction (n/a)
962  id_nb_snd = id_nb_snd +1
963  snd(id_nb_snd)%CL_FIELD_NAME='WW3_CDIR'
964  !
965  ! THM / wave_thm : sinus of mean direction (n/a)
966  id_nb_snd = id_nb_snd +1
967  snd(id_nb_snd)%CL_FIELD_NAME='WW3_SDIR'
968  !
969  CASE('THM')
970  ! THM / wave_thm : mean direction (n/a)
971  ! exchange the mean direction instead of cos/sin projection
972  id_nb_snd = id_nb_snd +1
973  snd(id_nb_snd)%CL_FIELD_NAME='WW3__DIR'
974  !
975  CASE('BHD')
976  ! BHD / wave_bhd : wave-induced Bernoulli head pressure (bhd in N.m-1)
977  id_nb_snd = id_nb_snd +1
978  snd(id_nb_snd)%CL_FIELD_NAME='WW3__BHD'
979  !
980  CASE('TWO')
981  ! tauox / wave_tauox : x-component of the wave-ocean momentum flux (tauox in m2.s-2)
982  id_nb_snd = id_nb_snd +1
983  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TWOX'
984  !
985  ! tauoy / wave_tauoy : y-component of the wave-ocean momentum flux (tauox in m2.s-2)
986  id_nb_snd = id_nb_snd +1
987  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TWOY'
988  !
989  CASE('TOC')
990  ! tauocx / wave_tauocx : x-component of the total wave-ocean momentum flux (tauocx in m2.s-2)
991  id_nb_snd = id_nb_snd +1
992  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TOCX'
993  !
994  ! tauocy / wave_tauocy : y-component of the total wave-ocean momentum flux (tauocx in m2.s-2)
995  id_nb_snd = id_nb_snd +1
996  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TOCY'
997  !
998  CASE('FOC')
999  ! phioc / wave_phioc : Wave-to-ocean TKE flux (phioc in W.m-2)
1000  id_nb_snd = id_nb_snd +1
1001  snd(id_nb_snd)%CL_FIELD_NAME='WW3__FOC'
1002  !
1003  CASE('TBB')
1004  ! Momentum flux due to bottom friction, u component (m2.s-2)
1005  id_nb_snd = id_nb_snd +1
1006  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TBBX'
1007  !
1008  ! Momentum flux due to bottom friction, v component (m2.s-2)
1009  id_nb_snd = id_nb_snd +1
1010  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TBBY'
1011  !
1012  CASE('FBB')
1013  ! phibbl / wave_phibbl : Energy flux due to bottom friction (phioc in W.m-2)
1014  id_nb_snd = id_nb_snd +1
1015  snd(id_nb_snd)%CL_FIELD_NAME='WW3__FBB'
1016  !
1017  CASE('UBR')
1018  ! uba / wave_ubrx : x component of the rms amplitude of orbital velocity of the waves (m/s)
1019  id_nb_snd = id_nb_snd +1
1020  snd(id_nb_snd)%CL_FIELD_NAME='WW3_UBRX'
1021  !
1022  ! uba / wave_ubry : y component of the rms amplitude of orbital velocity of the waves (m/s)
1023  id_nb_snd = id_nb_snd +1
1024  snd(id_nb_snd)%CL_FIELD_NAME='WW3_UBRY'
1025  !
1026  CASE('TAW')
1027  ! tauwix / wave_tauwix : Net wave-supported stress, u component (tauwix in m2.s-2)
1028  id_nb_snd = id_nb_snd +1
1029  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TAWX'
1030  !
1031  ! tauwiy / wave_tauwiy : ! Net wave-supported stress, v component (tauwix in m2.s-2)
1032  id_nb_snd = id_nb_snd +1
1033  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TAWY'
1034  !
1035  CASE('LM')
1036  ! wlm / wave_wlm : mean length wave (m)
1037  id_nb_snd = id_nb_snd +1
1038  snd(id_nb_snd)%CL_FIELD_NAME='WW3___LM'
1039  !
1040  CASE('WNM')
1041  ! wnmean / wave_wnmean : mean wave number (m-1)
1042  id_nb_snd = id_nb_snd +1
1043  snd(id_nb_snd)%CL_FIELD_NAME='WW3__WNM'
1044  !
1045  CASE('TUS')
1046  ! Volume transport associated to Stokes drift, u component (m2.s-1)
1047  id_nb_snd = id_nb_snd +1
1048  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TUSX'
1049  !
1050  ! Volume transport associated to Stokes drift, v component (m2.s-1)
1051  id_nb_snd = id_nb_snd +1
1052  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TUSY'
1053  !
1054  CASE('USS')
1055  ! Surface Stokes drift, u component (m.s-1)
1056  id_nb_snd = id_nb_snd +1
1057  snd(id_nb_snd)%CL_FIELD_NAME='WW3_USSX'
1058  !
1059  ! Surface Stokes drift, v component (m.s-1)
1060  id_nb_snd = id_nb_snd +1
1061  snd(id_nb_snd)%CL_FIELD_NAME='WW3_USSY'
1062  !
1063  CASE('OCHA')
1064  ! Charnock Coefficient (-)
1065  id_nb_snd = id_nb_snd +1
1066  snd(id_nb_snd)%CL_FIELD_NAME='WW3_OCHA'
1067 #endif
1068 
1069  !
1070  ! ATMOSPHERE MODEL VARIABLES
1071  !
1072 #ifdef W3_OASACM
1073  CASE('AHS')
1074  ! Significant wave height (m)
1075  id_nb_snd = id_nb_snd +1
1076  snd(id_nb_snd)%CL_FIELD_NAME='WW3__AHS'
1077  !
1078  CASE('CUR')
1079  ! Ocean sea surface current (m.s-1)
1080  id_nb_snd = id_nb_snd +1
1081  snd(id_nb_snd)%CL_FIELD_NAME='WW3_WSSU'
1082  !
1083  ! Ocean sea surface current (m.s-1)
1084  id_nb_snd = id_nb_snd +1
1085  snd(id_nb_snd)%CL_FIELD_NAME='WW3_WSSV'
1086  !
1087  CASE('ACHA')
1088  ! Charnock Coefficient (-)
1089  id_nb_snd = id_nb_snd +1
1090  snd(id_nb_snd)%CL_FIELD_NAME='WW3_ACHA'
1091  !
1092  CASE('FP')
1093  ! Peak frequency (s-1)
1094  id_nb_snd = id_nb_snd +1
1095  snd(id_nb_snd)%CL_FIELD_NAME='WW3___FP'
1096  !
1097  CASE('TP')
1098  ! Peak period (s)
1099  id_nb_snd = id_nb_snd +1
1100  snd(id_nb_snd)%CL_FIELD_NAME='WW3___TP'
1101  !
1102  CASE('FWS')
1103  ! Wind_sea_mean_period_T0M1 (s)
1104  id_nb_snd=id_nb_snd+1
1105  snd(id_nb_snd)%CL_FIELD_NAME='WW3__FWS'
1106 #endif
1107  !
1108 
1109  !
1110  ! ICE MODEL VARIABLES
1111  !
1112 #ifdef W3_OASICM
1113  CASE('IC5')
1114  ! Ice floe diameters (m)
1115  id_nb_snd = id_nb_snd +1
1116  snd(id_nb_snd)%CL_FIELD_NAME='WW3_ICEF'
1117  !
1118  CASE('TWI')
1119  ! TWIX : x stress to ice , u component (twix in m2.s-2)
1120  id_nb_snd = id_nb_snd +1
1121  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TWIX'
1122  ! TWIY : y stress to ice , v component (twiy in m2.s-2)
1123  id_nb_snd = id_nb_snd +1
1124  snd(id_nb_snd)%CL_FIELD_NAME='WW3_TWIY'
1125 #endif
1126  !
1127  CASE DEFAULT
1128  WRITE (ndso,1002) trim(teststr(1:6))
1129  END SELECT
1130  iout=iout+1
1131  END DO
1132  !
1133  ! Formats
1134  !
1135 1001 FORMAT (/' *** WAVEWATCH III WARNING IN W3OACPMD : '/ &
1136  ' REQUESTED COUPLING RECEIVED FIELD ',a,' WAS NOT RECOGNIZED.'/)
1137  !
1138 1002 FORMAT (/' *** WAVEWATCH III WARNING IN W3OACPMD : '/ &
1139  ' REQUESTED COUPLING SENT FIELD ',a,' WAS NOT RECOGNIZED.'/)
1140  !/
1141  !/ ------------------------------------------------------------------- /
1142  END SUBROUTINE get_list_exch_field
1143  !/ ------------------------------------------------------------------- /
1144  !/
1145 END MODULE w3oacpmd
1146 !/
1147 !/ ------------------------------------------------------------------- /
w3gdatmd::nseal
integer, pointer nseal
Definition: w3gdatmd.F90:1097
include
cmake src_list cmake include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_switches.cmake) check_switches("$
Definition: CMakeLists.txt:15
w3gdatmd::ygrd
double precision, dimension(:,:), pointer ygrd
Definition: w3gdatmd.F90:1205
constants::dera
real, parameter dera
DERA Conversion factor from degrees to radians.
Definition: constants.F90:77
w3gdatmd::ungtype
integer, parameter ungtype
Definition: w3gdatmd.F90:626
w3gdatmd::mrfct
integer, pointer mrfct
Definition: w3gdatmd.F90:1167
w3gdatmd::rlgtype
integer, parameter rlgtype
Definition: w3gdatmd.F90:624
w3oacpmd::cpl_oasis_snd
subroutine, public cpl_oasis_snd(ID_NB, ID_TIME, RDA_FIELD, LD_ACTION)
Definition: w3oacpmd.F90:563
w3oacpmd::snd_fld
type(cpl_field), dimension(ip_maxfld), public snd_fld
Definition: w3oacpmd.F90:76
w3oacpmd::il_nb_rcv
integer, public il_nb_rcv
Definition: w3oacpmd.F90:67
w3gdatmd::xgrd
double precision, dimension(:,:), pointer xgrd
Definition: w3gdatmd.F90:1205
w3gdatmd::sy
real, pointer sy
Definition: w3gdatmd.F90:1183
w3odatmd::iaproc
integer, pointer iaproc
Definition: w3odatmd.F90:457
w3gdatmd::ny
integer, pointer ny
Definition: w3gdatmd.F90:1097
w3oacpmd::il_nb_snd
integer, public il_nb_snd
Definition: w3oacpmd.F90:67
w3servmd::strsplit
subroutine strsplit(STRING, TAB)
Definition: w3servmd.F90:1440
w3oacpmd::cpl_oasis_finalize
subroutine, public cpl_oasis_finalize
Definition: w3oacpmd.F90:705
w3oacpmd::cpl_oasis_define
subroutine, public cpl_oasis_define(NDSO, RCV_STR, SND_STR)
Definition: w3oacpmd.F90:364
w3gdatmd::hqfac
real, dimension(:,:), pointer hqfac
Definition: w3gdatmd.F90:1212
w3gdatmd::x0
real, pointer x0
Definition: w3gdatmd.F90:1183
w3gdatmd::nsea
integer, pointer nsea
Definition: w3gdatmd.F90:1097
w3gdatmd::clgtype
integer, parameter clgtype
Definition: w3gdatmd.F90:625
w3servmd
Definition: w3servmd.F90:3
w3odatmd
Definition: w3odatmd.F90:3
w3oacpmd
Definition: w3oacpmd.F90:3
w3gdatmd::mapsf
integer, dimension(:,:), pointer mapsf
Definition: w3gdatmd.F90:1163
w3odatmd::naproc
integer, pointer naproc
Definition: w3odatmd.F90:457
w3oacpmd::rcv_fld
type(cpl_field), dimension(ip_maxfld), public rcv_fld
Definition: w3oacpmd.F90:76
w3gdatmd::smctype
integer, parameter smctype
Definition: w3gdatmd.F90:627
constants::radius
real, parameter radius
RADIUS Radius of the earth (m).
Definition: constants.F90:79
w3gdatmd::ijkcel
integer, dimension(:,:), pointer ijkcel
Definition: w3gdatmd.F90:1170
w3oacpmd::cpl_oasis_grid
subroutine, public cpl_oasis_grid(LD_MASTER, ID_LCOMM)
Definition: w3oacpmd.F90:155
w3oacpmd::id_oasis_time
integer, public id_oasis_time
Definition: w3oacpmd.F90:78
w3gdatmd::gtype
integer, pointer gtype
Definition: w3gdatmd.F90:1094
w3gdatmd::y0
real, pointer y0
Definition: w3gdatmd.F90:1183
w3oacpmd::cpl_oasis_rcv
subroutine, public cpl_oasis_rcv(ID_NB, ID_TIME, RDA_FIELD, LD_ACTION)
Definition: w3oacpmd.F90:634
w3gdatmd::hpfac
real, dimension(:,:), pointer hpfac
Definition: w3gdatmd.F90:1211
w3oacpmd::cplt0
logical, public cplt0
Definition: w3oacpmd.F90:80
w3gdatmd::sx
real, pointer sx
Definition: w3gdatmd.F90:1183
constants
Define some much-used constants for global use (all defined as PARAMETER).
Definition: constants.F90:20
w3gdatmd
Definition: w3gdatmd.F90:16
w3oacpmd::cpl_oasis_init
subroutine, public cpl_oasis_init(ID_LCOMM)
Definition: w3oacpmd.F90:93
w3oacpmd::cpl_field
Definition: w3oacpmd.F90:71
w3gdatmd::nx
integer, pointer nx
Definition: w3gdatmd.F90:1097
w3parall
Parallel routines for implicit solver.
Definition: w3parall.F90:22
w3gdatmd::mapsta
integer, dimension(:,:), pointer mapsta
Definition: w3gdatmd.F90:1163
w3parall::init_get_isea
subroutine init_get_isea(ISEA, JSEA)
Set ISEA for all schemes.
Definition: w3parall.F90:1398
w3gdatmd::flagll
logical, pointer flagll
Definition: w3gdatmd.F90:1219