From 06f5c0b0b99b507a230b4280090e98e0dc3c8b79 Mon Sep 17 00:00:00 2001 From: ignis Date: Mon, 29 Apr 2019 17:21:23 +0900 Subject: [PATCH] write result averages --- code/code_gen/code_gen.py | 25 +++++++++++++++++++++++++ code/code_gen/resources/m_template.f90 | 7 +++++++ code/m_terms.f90 | 21 +++++++++++++++++++++ code/post.f90 | 1 + 4 files changed, 54 insertions(+) diff --git a/code/code_gen/code_gen.py b/code/code_gen/code_gen.py index e569aa4..2141ba6 100644 --- a/code/code_gen/code_gen.py +++ b/code/code_gen/code_gen.py @@ -92,6 +92,20 @@ end do end do """ +avg_array_write = ''' +integer :: i + +open (200, file="qEdge_X.dat") + +write (200,*) output_header + +do i=1,nxp + write (200,'({0}e20.10)') real(i)*hxp, {1} +end do + +close (200) +''' + avg_array_divide = "{0} = {0} / denum {1}" real_array_diff = "call {0[0]} ( {0[0]}_{0[1]}, {0[1]} )" @@ -553,6 +567,16 @@ class FortranProgram: avg1 = StringIO.StringIO() calc2 = StringIO.StringIO() avg2 = StringIO.StringIO() + wres = StringIO.StringIO() + + hfmt = 'character (len = *), parameter :: output_header="{}"' + print >>decl, hfmt.format(" ".join(["x"] + self.parser.averages)) + + avgarr = "{}(i)" + print >>wres, avg_array_write.format( + len(self.parser.averages)+1, + ", ".join(map(avgarr.format, self.parser.averages)) + ) for var in self.pass1set | self.pass2set: print >>decl, self.codes[var]["decl"] @@ -584,6 +608,7 @@ class FortranProgram: md["module_pass1_avg"] = avg1.getvalue() md["module_pass2"] = calc2.getvalue() md["module_pass2_avg"] = avg2.getvalue() + md["module_write_result"] = wres.getvalue() return md diff --git a/code/code_gen/resources/m_template.f90 b/code/code_gen/resources/m_template.f90 index 8d6e143..9d73d0b 100644 --- a/code/code_gen/resources/m_template.f90 +++ b/code/code_gen/resources/m_template.f90 @@ -68,4 +68,11 @@ denum=real(nfiles*nyp*nzp) end subroutine m_{0[module_name]}_average_pass2 +subroutine m_{0[module_name]}_write_result + +{0[module_write_result]} + +end subroutine m_{0[module_name]}_write_result + + end module m_{0[module_name]} diff --git a/code/m_terms.f90 b/code/m_terms.f90 index 4f7168a..0db0057 100644 --- a/code/m_terms.f90 +++ b/code/m_terms.f90 @@ -6,6 +6,7 @@ use m_calculate implicit none +character (len = *), parameter :: output_header="avg_fsd fsd_avg_t1 fsd_avg_t2 fsd_avg_fu fsd_avg_absk" real*8, allocatable, dimension(:,:,:) :: ddx_nx real*8, allocatable, dimension(:,:,:) :: t1_fsd real*8, allocatable, dimension(:,:,:) :: t2_fsd @@ -412,5 +413,25 @@ fsd_avg_t2 = fsd_avg_t2 / denum / avg_fsd end subroutine m_terms_average_pass2 +subroutine m_terms_write_result + + +integer :: i + +open (200, file="qEdge_X.dat") + +write (200,*) output_header + +do i=1,nxp + write (200,'(6e20.10)') real(i)*hxp, avg_fsd(i), fsd_avg_t1(i), fsd_avg_t2(i), fsd_avg_fu(i), fsd_avg_absk(i) +end do + +close (200) + + + +end subroutine m_terms_write_result + + end module m_terms diff --git a/code/post.f90 b/code/post.f90 index cd58f1f..52e51c0 100644 --- a/code/post.f90 +++ b/code/post.f90 @@ -77,6 +77,7 @@ CALL m_terms_average_pass2(countnum) + CALL m_terms_write_result CALL DEALLOCATES_CLOSE