LMDZ
write_field_loc.F90
Go to the documentation of this file.
2 implicit none
3 
4  interface writefield_u
5  module procedure write_field1d_u,write_field2d_u
6  end interface writefield_u
7 
8  interface writefield_v
9  module procedure write_field1d_v,write_field2d_v
10  end interface writefield_v
11 
12  contains
13 
14  subroutine write_field1d_u(name,Field)
15  character(len=*) :: name
16  real, dimension(:) :: Field
17 
18  CALL write_field_u_gen(name,field,1)
19 
20  end subroutine write_field1d_u
21 
22  subroutine write_field2d_u(name,Field)
23  implicit none
24 
25  character(len=*) :: name
26  real, dimension(:,:) :: Field
27  integer :: ll
28 
29  ll=size(field,2)
30  CALL write_field_u_gen(name,field,ll)
31 
32  end subroutine write_field2d_u
33 
34 
35  SUBROUTINE write_field_u_gen(name,Field,ll)
37  USE write_field
38  USE mod_hallo
39  implicit none
40  include 'dimensions.h'
41  include 'paramet.h'
42 
43  character(len=*) :: name
44  real, dimension(ijb_u:ije_u,ll) :: Field
45  real, allocatable,SAVE :: New_Field(:,:,:)
46  integer,dimension(0:mpi_size-1) :: jj_nb_master
47  type(request),SAVE :: Request_write
48 !$OMP THREADPRIVATE(Request_write)
49  integer :: ll,i
50 
51 
52  jj_nb_master(:)=0
53  jj_nb_master(0)=jjp1
54 !$OMP BARRIER
55 !$OMP MASTER
56  allocate(new_field(iip1,jjp1,ll))
57 !$OMP END MASTER
58 !$OMP BARRIER
59 
60 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
61  DO i=1,ll
62  new_field(:,jj_begin:jj_end,i)=reshape(field(ij_begin:ij_end,i),(/iip1,jj_nb/))
63  ENDDO
64 !$OMP BARRIER
65  call register_swapfield(new_field,new_field,ip1jmp1,ll,jj_nb_master,request_write)
66  call sendrequest(request_write)
67 !$OMP BARRIER
68  call waitrequest(request_write)
69 !$OMP BARRIER
70 
71 !$OMP MASTER
72  if (mpi_rank==0) call writefield(name,new_field)
73  DEALLOCATE(new_field)
74 !$OMP END MASTER
75 !$OMP BARRIER
76  END SUBROUTINE write_field_u_gen
77 
78 
79  subroutine write_field1d_v(name,Field)
80  character(len=*) :: name
81  real, dimension(:) :: Field
82 
83  CALL write_field_v_gen(name,field,1)
84 
85  end subroutine write_field1d_v
86 
87  subroutine write_field2d_v(name,Field)
88  implicit none
89 
90  character(len=*) :: name
91  real, dimension(:,:) :: Field
92  integer :: ll
93 
94  ll=size(field,2)
95  CALL write_field_v_gen(name,field,ll)
96 
97  end subroutine write_field2d_v
98 
99 
100  SUBROUTINE write_field_v_gen(name,Field,ll)
102  USE write_field
103  USE mod_hallo
104  implicit none
105  include 'dimensions.h'
106  include 'paramet.h'
107 
108  character(len=*) :: name
109  real, dimension(ijb_v:ije_v,ll) :: Field
110  real, allocatable,SAVE :: New_Field(:,:,:)
111  integer,dimension(0:mpi_size-1) :: jj_nb_master
112  type(request),SAVE :: Request_write
113 !$OMP THREADPRIVATE(Request_write)
114  integer :: ll,i,jje,ije,jjn
115 
116 
117  jj_nb_master(:)=0
118  jj_nb_master(0)=jjp1
119 
120 !$OMP BARRIER
121 !$OMP MASTER
122  allocate(new_field(iip1,jjm,ll))
123 !$OMP END MASTER
124 !$OMP BARRIER
125 
126  IF (pole_sud) THEN
127  jje=jj_end-1
128  ije=ij_end-iip1
129  jjn=jj_nb-1
130  ELSE
131  jje=jj_end
132  ije=ij_end
133  jjn=jj_nb
134  ENDIF
135 
136 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
137  DO i=1,ll
138  new_field(:,jj_begin:jje,i)=reshape(field(ij_begin:ije,i),(/iip1,jjn/))
139  ENDDO
140 !$OMP BARRIER
141  call register_swapfield(new_field,new_field,ip1jm,ll,jj_nb_master,request_write)
142  call sendrequest(request_write)
143 !$OMP BARRIER
144  call waitrequest(request_write)
145 !$OMP BARRIER
146 
147 !$OMP MASTER
148  if (mpi_rank==0) call writefield(name,new_field)
149  DEALLOCATE(new_field)
150 !$OMP END MASTER
151 !$OMP BARRIER
152  END SUBROUTINE write_field_v_gen
153 
154 end module write_field_loc
155 
!$Header llmm1 INTEGER ip1jmp1
Definition: paramet.h:14
integer, save mpi_rank
integer, save jj_end
integer, save jj_begin
integer, save ij_end
logical, save pole_sud
subroutine write_field1d_u(name, Field)
!$Header llmm1 INTEGER ip1jm
Definition: paramet.h:14
subroutine write_field1d_v(name, Field)
!$Header jjp1
Definition: paramet.h:14
subroutine write_field_v_gen(name, Field, ll)
subroutine write_field2d_v(name, Field)
subroutine sendrequest(a_Request)
Definition: mod_hallo.F90:1072
integer, save jj_nb
integer, save ij_begin
subroutine register_swapfield(FieldS, FieldR, ij, ll, jj_Nb_New, a_request)
Definition: mod_hallo.F90:254
subroutine write_field_u_gen(name, Field, ll)
subroutine waitrequest(a_Request)
Definition: mod_hallo.F90:1196
subroutine write_field2d_u(name, Field)