/[lmdze]/trunk/libf/IOIPSL/ioipslmpp.f90
ViewVC logotype

Contents of /trunk/libf/IOIPSL/ioipslmpp.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 30 - (show annotations)
Thu Apr 1 09:07:28 2010 UTC (14 years, 1 month ago) by guez
File size: 5113 byte(s)
Imported Source files of the external library "IOIPSL_Lionel" into
"libf/IOIPSL".

Split "cray.f90" into "scopy.f90" and "ssum.f90".

Rewrote "leapfrog" in order to have a clearer algorithmic structure.

1 !$Header: /home/ioipsl/CVSROOT/IOIPSL/src/Attic/ioipslmpp.f90,v 2.0 2004/04/05 14:50:16 adm Exp $
2 !-
3 MODULE ioipslmpp
4 !---------------------------------------------------------------------
5 USE errioipsl, ONLY : histerr
6 !-
7 IMPLICIT NONE
8 !-
9 PRIVATE
10 PUBLIC :: ioipsl_inimpp, ioipslmpp_file, ioipslmpp_addatt
11 !-
12 LOGICAL,SAVE :: ison_mpp=.FALSE., lock=.FALSE.
13 !-
14 ! Number of distributed dimension for mpp
15 !-
16 INTEGER,PARAMETER :: jpp=4
17 !-
18 INTEGER,SAVE :: pe_number, pe_total_number
19 INTEGER,SAVE,DIMENSION(jpp) :: &
20 & domain_global_size, domain_local_size, domain_abs_first, &
21 & domain_abs_last, domain_halo_start_size, domain_halo_end_size
22 !-
23 CONTAINS
24 !-
25 !===
26 !-
27 SUBROUTINE ioipsl_inimpp &
28 & (petotnb, penb, pglo, ploc, pabsf, pabsl, phals, phale)
29 !---------------------------------------------------------------------
30 !- This routine sets up the MPP activity of IOIPSL.
31 !- It will store all the PE information and allow it to be stored
32 !- in the netCDF file and change the file names.
33 !-
34 !- INPUT
35 !-
36 !- penb : process number
37 !- petotnb : total number of process
38 !- pglo(1) : total number of points in first direction
39 !- pglo(2) : total number of points in second direction
40 !- ploc(1) : local number of points in first direction
41 !- ploc(2) : local number of points in second direction
42 !- pabsf(1) : absolute position of first local point for
43 !- first dimension
44 !- pabsf(2) : absolute position of first local point for
45 !- second dimension
46 !- pabsl(1) : absolute position of last local point for
47 !- first dimension
48 !- pabsl(2) : absolute position of last local point for
49 !- second dimension
50 !- phals(1) : start halo size in first direction
51 !- phals(2) : start halo size in second direction
52 !- phale(1) : end halo size in first direction
53 !- phale(2) : end halo size in second direction
54 !- phale(2) : end halo size in second direction
55 !---------------------------------------------------------------------
56 IMPLICIT NONE
57 !-
58 INTEGER,INTENT(in) :: penb, petotnb
59 INTEGER,DIMENSION(:),INTENT(in) :: &
60 & pglo, ploc, pabsf, pabsl, phals, phale
61 !---------------------------------------------------------------------
62 IF (lock) THEN
63 CALL histerr (3,'ioipslmpp','ioipslmpp called to late', &
64 & 'please call ioipslmpp before first histbeg','')
65 ELSE
66 !-- Take note of the fact that we are on an MPP.
67 ison_mpp=.TRUE.
68 !--
69 pe_number = penb
70 pe_total_number = petotnb
71 domain_global_size(:) = pglo(:)
72 domain_local_size(:) = ploc(:)
73 domain_abs_first(:) = pabsf(:)
74 domain_abs_last(:) = pabsl(:)
75 domain_halo_start_size(:) = phals(:)
76 domain_halo_end_size(:) = phale(:)
77 !-- Lock this information into the module
78 !-- so that it does not get changed
79 lock = .TRUE.
80 ENDIF
81 !---------------------------
82 END SUBROUTINE ioipsl_inimpp
83 !-
84 !===
85 !-
86 SUBROUTINE ioipslmpp_file (filename)
87 !---------------------------------------------------------------------
88 !- Update the netCDF file to include the PE number on which this
89 !- copy of IOIPSL runs.
90 !- This routine is called by histbeg and not by user anyway
91 !---------------------------------------------------------------------
92 IMPLICIT NONE
93 !-
94 CHARACTER(LEN=*),INTENT(inout) :: filename
95 !-
96 INTEGER :: il
97 CHARACTER(LEN=3) :: str
98 !---------------------------------------------------------------------
99 IF (ison_mpp) THEN
100 WRITE(str,'(I3.3)') pe_number
101 !-- Tester la taille de la chaine
102 il = INDEX(filename,'.nc')
103 filename = filename(1:il-1)//'_'//str//'.nc'
104 ENDIF
105 !-
106 ! This as to be done after ioipslmpp
107 !-
108 lock = .TRUE.
109 !---------------------------------------------------------------------
110 END SUBROUTINE ioipslmpp_file
111 !-
112 !===
113 !-
114 SUBROUTINE ioipslmpp_addatt (fid)
115 !---------------------------------------------------------------------
116 !- Adds the attributed to the netCDF file.
117 !- This routine is called by histend and not by user anyway
118 !---------------------------------------------------------------------
119 USE netcdf
120 !-
121 IMPLICIT NONE
122 !-
123 INTEGER,INTENT(in) :: fid
124 !-
125 INTEGER :: iret
126 !---------------------------------------------------------------------
127 IF (ison_mpp) THEN
128 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
129 & 'PE_number',pe_number)
130 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
131 & 'PE_total_number',pe_total_number)
132 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
133 & 'DOMAIN_global_size',domain_global_size(1:jpp))
134 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
135 & 'DOMAIN_local_size',domain_local_size(1:jpp))
136 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
137 & 'DOMAIN_absolute_first_point_number',domain_abs_first(1:jpp))
138 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
139 & 'DOMAIN_absolute_last_point_number',domain_abs_last(1:jpp))
140 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
141 & 'DOMAIN_start_halo_size',domain_halo_start_size(1:jpp))
142 iret = NF90_PUT_ATT (fid,NF90_GLOBAL, &
143 & 'DOMAIN_end_halo_size',domain_halo_end_size(1:jpp))
144 ENDIF
145 !-
146 ! This as to be done after ioipslmpp
147 !-
148 lock = .TRUE.
149 !------------------------------
150 END SUBROUTINE ioipslmpp_addatt
151 !-
152 !===
153 !-
154 END MODULE ioipslmpp

  ViewVC Help
Powered by ViewVC 1.1.21