source: CPL/oasis3-mct/branches/OASIS3-MCT_2.0_branch/lib/psmile/src/mod_oasis_var.F90 @ 4775

Last change on this file since 4775 was 4775, checked in by aclsce, 5 years ago
  • Imported oasis3-mct from Cerfacs svn server (not suppotred anymore).

The version has been extracted from https://oasis3mct.cerfacs.fr/svn/branches/OASIS3-MCT_2.0_branch/oasis3-mct@1818

File size: 3.8 KB
Line 
1  MODULE mod_oasis_var
2
3  USE mod_oasis_kinds
4  USE mod_oasis_data
5  USE mod_oasis_parameters
6  USE mod_oasis_sys
7
8  IMPLICIT none
9
10  private
11
12  !--- interfaces ---
13  public oasis_def_var
14
15  !--- datatypes ---
16
17  integer(kind=ip_intwp_p),public :: prism_nvar = 0
18
19  CONTAINS
20
21!---------------------------------------------------------------
22
23  SUBROUTINE oasis_def_var(id_nports, cdport, id_part, &
24         id_var_nodims, kinout, id_var_shape, ktype, kinfo)
25!    ---------------------------------------------------------------
26     INTEGER(kind=ip_i4_p) :: kinout, ktype, id_nports,id_part
27     INTEGER(kind=ip_i4_p) :: id_var_nodims(2),id_var_shape(2*id_var_nodims(1))
28     CHARACTER(len=*)         :: cdport
29     INTEGER(kind=ip_i4_p),optional :: kinfo
30!    ---------------------------------------------------------------
31     INTEGER(kind=ip_i4_p) :: n
32     character(len=*),parameter :: subname = 'oasis_def_var'
33     LOGICAL    :: l_field_in_namcouple
34!    ---------------------------------------------------------------
35
36     call oasis_debug_enter(subname)
37
38     kinfo = OASIS_Ok
39
40     l_field_in_namcouple = .FALSE.
41     do n = 1,mvar
42        if (trim(cdport) == trim(total_namsrcfld(n)) .OR. trim(cdport) == trim(total_namdstfld(n))) &
43       &       l_field_in_namcouple = .TRUE.
44     enddo
45
46     if (.not. l_field_in_namcouple) then
47        id_nports = OASIS_Var_Uncpl
48        if (OASIS_debug >= 2) then
49           write(nulprt,*) subname,' variable not in namcouple return ',trim(cdport)
50           call oasis_flush(nulprt)
51        endif
52        call oasis_debug_exit(subname)
53        return
54     endif
55
56
57     do n = 1,prism_nvar
58        if (trim(cdport) == trim(prism_var(n)%name)) then
59           write(nulprt,*) subname,' variable already defined with var_def ',trim(cdport)
60           WRITE(nulprt,*) subname,' abort by model :',compid,' proc :',mpi_rank_local
61           CALL oasis_flush(nulprt)
62           call oasis_abort_noarg()
63        endif
64     enddo
65
66     prism_nvar = prism_nvar + 1
67     id_nports = prism_nvar
68
69
70     if (prism_nvar > mvar) then
71        write(nulprt,*) subname,' ERROR prism_nvar too large ',prism_nvar,mvar
72        WRITE(nulprt,*) subname,' abort by model :',compid,' proc :',mpi_rank_local
73        CALL oasis_flush(nulprt)
74        call oasis_abort_noarg()
75     endif
76
77     prism_var(prism_nvar)%name = trim(cdport)
78     prism_var(prism_nvar)%part = id_part
79     prism_var(prism_nvar)%ndim = id_var_nodims(1)
80     prism_var(prism_nvar)%num  = id_var_nodims(2)
81     prism_var(prism_nvar)%ops  = kinout
82     prism_var(prism_nvar)%type = ktype
83     prism_var(prism_nvar)%size = 1
84     do n = 1,prism_var(prism_nvar)%ndim
85        prism_var(prism_nvar)%size = prism_var(prism_nvar)%size*(id_var_shape(2*n)-&
86                                     id_var_shape(2*n-1)+1)
87     enddo
88     prism_var(prism_nvar)%ncpl = 0
89     prism_var(prism_nvar)%cpl  = 0
90
91    !----------------------------------
92    !--- some diagnostics
93    !----------------------------------
94     if (OASIS_debug >= 2) then
95        write(nulprt,*) ' '
96        write(nulprt,*) subname,' prism_nvar    = ',prism_nvar
97        write(nulprt,*) subname,' varname = ',prism_nvar,trim(prism_var(prism_nvar)%name)
98        write(nulprt,*) subname,' varpart = ',prism_nvar,prism_var(prism_nvar)%part
99        write(nulprt,*) subname,' varndim = ',prism_nvar,prism_var(prism_nvar)%ndim
100        write(nulprt,*) subname,' varnum  = ',prism_nvar,prism_var(prism_nvar)%num
101        write(nulprt,*) subname,' varops  = ',prism_nvar,prism_var(prism_nvar)%ops
102        write(nulprt,*) subname,' vartype = ',prism_nvar,prism_var(prism_nvar)%type
103        write(nulprt,*) subname,' varsize = ',prism_nvar,prism_var(prism_nvar)%size
104        write(nulprt,*) ' '
105        CALL oasis_flush(nulprt)
106     endif
107
108     call oasis_debug_exit(subname)
109
110   END SUBROUTINE oasis_def_var
111
112 END MODULE mod_oasis_var
113
Note: See TracBrowser for help on using the repository browser.