From 42e769804b6cf4053cbbdc9819fc5891558770f7 Mon Sep 17 00:00:00 2001 From: Patrik Tesarik Date: Mon, 3 Sep 2018 22:28:19 +0200 Subject: [PATCH 01/12] first lines --- .../code/fortran/monte_carlo_pi.f90 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index e69de29bb..80ff9c696 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -0,0 +1,9 @@ +PROGRAM monte_carlo +IMPLICIT NONE + +REAL(8) :: pos, vel, acl, dt + + + +END PROGRAM monte_carlo + From fb31d586ac087819ddf892fc52396749ba4f51e4 Mon Sep 17 00:00:00 2001 From: Patrik Tesarik Date: Mon, 3 Sep 2018 22:37:38 +0200 Subject: [PATCH 02/12] added further code --- .../code/fortran/monte_carlo_pi.f90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index 80ff9c696..4d65b4747 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -1,8 +1,13 @@ PROGRAM monte_carlo IMPLICIT NONE -REAL(8) :: pos, vel, acl, dt +REAL(8) :: pos_x,pos_Y, r +! BOOL :: in_circle +! Check if numbers are in circle quadrant +in_circle = FALSE +IF pos_y ** 2 + pos_x ** 2 less r ** 2 + THEN in_circle = TRUE END PROGRAM monte_carlo From 3b175e4ee67809d7af9cf0565a14adff276a7340 Mon Sep 17 00:00:00 2001 From: Patrik Tesarik Date: Tue, 4 Sep 2018 00:40:42 +0200 Subject: [PATCH 03/12] Figured the use of functions out --- .../code/fortran/.gitignore | 0 .../code/fortran/monte_carlo_pi.f90 | 27 ++++++++++++------ .../code/fortran/montecarlo | Bin 0 -> 17000 bytes 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 contents/monte_carlo_integration/code/fortran/.gitignore create mode 100755 contents/monte_carlo_integration/code/fortran/montecarlo diff --git a/contents/monte_carlo_integration/code/fortran/.gitignore b/contents/monte_carlo_integration/code/fortran/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index 4d65b4747..f01fa8c32 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -1,14 +1,25 @@ +FUNCTION in_circle(pos_x, pos_y, r) ! RESULT(in_circle) + IMPLICIT NONE + REAL(64), INTENT(IN) :: pos_x, pos_y, r + LOGICAL :: in_circle +in_circle = (pos_x ** 2 + pos_y ** 2) < r +END FUNCTION in_circle + PROGRAM monte_carlo IMPLICIT NONE -REAL(8) :: pos_x,pos_Y, r -! BOOL :: in_circle -! Check if numbers are in circle quadrant - -in_circle = FALSE -IF pos_y ** 2 + pos_x ** 2 less r ** 2 - THEN in_circle = TRUE +INTEGER :: i,n +REAL(64) :: pos_x,pos_y, r, pi_est, pi_count +LOGICAL :: in_circle +! TEST CASE WRITE(*,*) in_circle(0.5d0, 0.5d0, 1d0) ! is true +n = 100000 +pi_count = 0 + DO i=0,n + CALL RANDOM_NUMBER(pos_x) + CALL RANDOM_NUMBER(pos_y) + + IF in_circle(pos_x, pos_y, f) + THEN pi_count = pi_count + 1 END PROGRAM monte_carlo - diff --git a/contents/monte_carlo_integration/code/fortran/montecarlo b/contents/monte_carlo_integration/code/fortran/montecarlo new file mode 100755 index 0000000000000000000000000000000000000000..e79b456c737566b94a21c335b0b38926212d9189 GIT binary patch literal 17000 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 O*W6%fcpU}~R{RrKjZxPC literal 0 HcmV?d00001 From 906cc0b08be57a42ca4f90d68d783e75af0261c0 Mon Sep 17 00:00:00 2001 From: Patrik Tesarik Date: Tue, 4 Sep 2018 00:50:31 +0200 Subject: [PATCH 04/12] Figured the use of functions out --- .../code/fortran/monte_carlo_pi.f90 | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index f01fa8c32..80f0e9b4f 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -9,17 +9,22 @@ PROGRAM monte_carlo IMPLICIT NONE INTEGER :: i,n -REAL(64) :: pos_x,pos_y, r, pi_est, pi_count +REAL(64) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi LOGICAL :: in_circle ! TEST CASE WRITE(*,*) in_circle(0.5d0, 0.5d0, 1d0) ! is true +pi = 3.1415926535d0 n = 100000 pi_count = 0 - DO i=0,n - CALL RANDOM_NUMBER(pos_x) - CALL RANDOM_NUMBER(pos_y) - - IF in_circle(pos_x, pos_y, f) - THEN pi_count = pi_count + 1 + DO i=0,n + CALL RANDOM_NUMBER(pos_x) + CALL RANDOM_NUMBER(pos_y) + + IF in_circle(pos_x, pos_y, f) + THEN pi_count = pi_count + 1 + pi_est = 4 * pi_count / n + pi_error = 100 * (abs(pi_est - pi)/pi) + WRITE(*,*) 'The pi estimate is: ', pi_est + WRITE(*,*) 'Percent error is: ', pi_error, ' %' END PROGRAM monte_carlo From 0d56e0ff52e75b18964d0e9a626a14872323c5ad Mon Sep 17 00:00:00 2001 From: depate Date: Tue, 4 Sep 2018 01:45:49 +0200 Subject: [PATCH 05/12] Running program. 1 Warning left. Pi estimate cruel" --- .../code/fortran/.gitignore | 1 + .../code/fortran/monte_carlo_pi.f90 | 33 ++++++++++-------- .../code/fortran/montecarlo | Bin 17000 -> 17560 bytes 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/contents/monte_carlo_integration/code/fortran/.gitignore b/contents/monte_carlo_integration/code/fortran/.gitignore index e69de29bb..9299e9762 100644 --- a/contents/monte_carlo_integration/code/fortran/.gitignore +++ b/contents/monte_carlo_integration/code/fortran/.gitignore @@ -0,0 +1 @@ +montecarlo diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index 80f0e9b4f..7f08820e0 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -1,30 +1,35 @@ FUNCTION in_circle(pos_x, pos_y, r) ! RESULT(in_circle) IMPLICIT NONE - REAL(64), INTENT(IN) :: pos_x, pos_y, r + REAL(16), INTENT(IN) :: pos_x, pos_y, r LOGICAL :: in_circle -in_circle = (pos_x ** 2 + pos_y ** 2) < r +in_circle = (pos_x ** 2 + pos_y ** 2) < r ** 2 END FUNCTION in_circle PROGRAM monte_carlo IMPLICIT NONE INTEGER :: i,n -REAL(64) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi +REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi LOGICAL :: in_circle ! TEST CASE WRITE(*,*) in_circle(0.5d0, 0.5d0, 1d0) ! is true -pi = 3.1415926535d0 -n = 100000 +r = 1 +pi = DACOS(-1.d0) !!3.1415926535d0 +! TEST CASE WRITE(*,*) 'Pi = ', pi +n = 10000000 +pos_x = 0 +pos_y = 0 pi_count = 0 DO i=0,n - CALL RANDOM_NUMBER(pos_x) - CALL RANDOM_NUMBER(pos_y) + CALL RANDOM_NUMBER(pos_x) + CALL RANDOM_NUMBER(pos_y) - IF in_circle(pos_x, pos_y, f) - THEN pi_count = pi_count + 1 - - pi_est = 4 * pi_count / n - pi_error = 100 * (abs(pi_est - pi)/pi) - WRITE(*,*) 'The pi estimate is: ', pi_est - WRITE(*,*) 'Percent error is: ', pi_error, ' %' + IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN + pi_count = pi_count + 1 + END IF + END DO +pi_est = 4 * pi_count / n +pi_error = 100 * (abs(pi_est - pi)/pi) +WRITE(*,*) 'The pi estimate is: ', pi_est +WRITE(*,*) 'Percent error is: ', pi_error, ' %' END PROGRAM monte_carlo diff --git a/contents/monte_carlo_integration/code/fortran/montecarlo b/contents/monte_carlo_integration/code/fortran/montecarlo index e79b456c737566b94a21c335b0b38926212d9189..d5961a519d2f29da3f7f6e6a165786c84f376ccc 100755 GIT binary patch literal 17560 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 QNYTCz*c$FKgECh9A4A@v-T(jq delta 2840 zcmZuzYiv|S6rOwUZhLpz?u#zFrNC|Q?zT(0t)8(P_?MT^(R$>fDNo2>gedg9oCbnkoxacz*B_ z$!)NqZ+J8`P9z&3F1Z9%t5aHioYt_^;1>45b;AbO6EWqiXp37+Js+-@kuqEDuYM0A>Yh1`{jOH3T*cAi|TLcSN35Q1I_$8HXunLeFI^0;*e43# z!7lscX_Js5>%)tbE!9VS*i?EhcjhR))qkU)ItQ>$FIQFdl<@|P*r#@lT5Xy5Sw^jo z58-!a)Y^IyW%DYl|Fm`IkoA+H;YACS%~#4X?9WQj-wLI74m#ahT!Kt+2&0{8p`#>< z-Cre&y;d|qv~@GgrHiffEh)AsJwK+m|E;P@pVLD-^p$!Mx|E*3(l28?*gsq8>nzSb zVW2(GxPclYiWGaiJSJb5A z==vB+MA`DCJiN+h^=zdQN&R7+d^`SFJ-qLU7iH!E?@l zd2qnwmHNGguC?vYcdkq>U$$;dd$Oa=x2htbdAhHmuK$tnIW~n!@@g5RY0*o&#>>9zobgxMw zlO7;ajNeTBT9NOdgvC~8aW`1AUXr^>bV6iWxVVtg)R>O78^x+g`xRosyZH zrU;)0LqZBp2Au{A!SyhQd_p4>gq)I{q$t9w&_+RlOCguginS9g;fDGlniKaGC$>dg z)@x&UnkJOzcP{TT8yf;~lUCRp_KV$i_%>Yg5H&oYU(N%%<#El>N&;R+OoU+A12M_q z6o{SdDbUS0Ktb45&$7Zs_#4TUzhFZk;|YmzhM}r~gYbufYi%Hux}Gk=WD`g(Ii^1& zTzeRKFL4ni#uIiD-g{(-U$|AZ1i9(mi<4-y`^XyToTT zE0Ju6f-;x*mL^Ri2eFUse`5F)dHT*TCg1C$_UP-%&+kvj+eH^?jXgNpRh{RLBiG*1 z{dDWmt%P8iCoh1>Y@^#a#!D4!E~Dv!bzT(*lg5nc561LG(Z21=4(xR1+{cV z8}+fZD+B|}fco+?&Ux|rreu<|cXYP3KmUR+=nKy(uYma#FZNgZpr&#_NIINAn}$D;zC>svK`6Hj3Ug0-{k zd^1}Etcwix@HjYIoejHc-MFcTYopE%T{oo9Bp*$EU`$Lm2WGKe*F~sIl$i@EnJ5Wx HqI&W_2}BZV From d0232d69bafe724d865d67a927d792b07017817e Mon Sep 17 00:00:00 2001 From: depate Date: Tue, 4 Sep 2018 02:08:02 +0200 Subject: [PATCH 06/12] 1M samples --- .../code/fortran/monte_carlo_pi.f90 | 2 +- .../code/fortran/montecarlo | Bin 17560 -> 17560 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index 7f08820e0..ca991f32e 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -16,7 +16,7 @@ PROGRAM monte_carlo r = 1 pi = DACOS(-1.d0) !!3.1415926535d0 ! TEST CASE WRITE(*,*) 'Pi = ', pi -n = 10000000 +n = 1000000 pos_x = 0 pos_y = 0 pi_count = 0 diff --git a/contents/monte_carlo_integration/code/fortran/montecarlo b/contents/monte_carlo_integration/code/fortran/montecarlo index d5961a519d2f29da3f7f6e6a165786c84f376ccc..d76a059c1061e4961798e235bc2e5ff486c49489 100755 GIT binary patch delta 998 zcmY+Ce@GKy7{~ASL+5ZmTppH~ZtDb>I5usjk}ze^1xn%%k}@>ht_jOY&WQeKvne!W z8NN{ar!vq2ArlTm7Sd>fAVDb_L7*UH7e-5kAhfRMy&FOYci-FRdA{HG*}ZQpLdGKG zjEYoGDhctLRB{G#lgxd*RDSVps%e6x>Q1E zanUyXaOx}y`ZXS7+sZ^8jT&)<+aP?_A3*^0Rze754)^gp2Z9hzl7qp0XT6RHwh!(L zf)EU>F;O3FVkPOXqHfyR5cw*RlVTnW&=A>zHa`4U5QY+ltsXn@uqMi$^M*io3p@gUtbhr1x*CurxQa-|f?xMM`x zd^b}eorZyIW^e(Yk4u;9I+FY*wuQf|_}}6xj%J8^lLVQp!!e8DMK`DyMwWmlu|tk9TonXEwPjD@zAZm-YN!+MOq7rPaH&Dly0f z&sDf>Xvch3*$y2_uI_|ajhbW%)F)S<7iImj7{!^bTXL-Ga;uEAbJeHvNZEY~H9Kx# yy5wL<(#Y9QXOglXxm-<^j?8daE2?aj-1+LBOxdsk#hq4lj1t!*z_IImCjSTf%V&Q8 delta 1100 zcmZ`&Ur19?7{6!R)irf@iJKPcuJcF@aX5AUi561^-DuJ1A7u;8*2=Q9T#*koWeN?s zQC<)cB75l}kc3Ml>mflwiXI9o!ziK1ZWu@wy=2|K?{3&jT{!pmo!|X^zjMxazB`g2 zBMCBLB&MHHn>D0hm zWsqyvUn8;WI)(`ggNCxrU?U{@=~W=yQ*m#y0tjy47QAQKyD%XTMYvAuMKkcueY6!O zMLpUiL@k2IzRf`gKfN^DPkTX}3uD$#yD$cf;!XuIM7xBRg)|eL(20)%Unc!Y@^?E9&zYAhCgDTp1^CnT0rs>h%Th+!HGBtE5>2bv!oIFMKb znPT~^ssmHe`*8l8)8Gzhpo$w*xTmF?$ak;thk!@s9570uCi2rtV8YbGIb)PU_*C(0 zsyA#Xm6uJG71$o;HDjJNoyQAeMGqb|(Xm!$2b}G{We!1NG7l6`kPBMkf-(utSmjEn zGS(l;`vWP!cN+fnF8!A`=rYh2?-y*V)3$ACTYl~G#(+seJE6*+R&7nM6a}1R544uU zXH*QPIxj3#r&{qsw$L|&&3X7pV`y55U|Rf(QMrtP=y{dJFpn}JQ3(N|)IfV^mnFn! zjMEVpXYbc+IlE-HZpi<#iDC9b=@9n@oFCEYgyNESTivE1{yC|UcJRfyXFAVDkGC8< zdcLExrK{Z)X{eNz`2tu7pI|%hNuj>NZIkYm?8+Ve zrmCx;eFj(nzl-m?WOfXZap|_hYM5a4BT~|_v1oWjRh?+*H(SDHBSwrL#tRq|(pSfJ z_BAM2xv})5Neb!=QkUK!jaPK*3T(2&wWvolRk?IzTyChzCpwEw+T*#1>=RFfkTKa^ rmq~P|tn!w6j%3ujs_QH3 Date: Tue, 4 Sep 2018 02:19:52 +0200 Subject: [PATCH 07/12] formating style --- .../code/fortran/monte_carlo_pi.f90 | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 index ca991f32e..ad7d1d15b 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 @@ -1,7 +1,7 @@ -FUNCTION in_circle(pos_x, pos_y, r) ! RESULT(in_circle) - IMPLICIT NONE - REAL(16), INTENT(IN) :: pos_x, pos_y, r - LOGICAL :: in_circle +FUNCTION in_circle(pos_x, pos_y, r) +IMPLICIT NONE +REAL(16), INTENT(IN) :: pos_x, pos_y, r +LOGICAL :: in_circle in_circle = (pos_x ** 2 + pos_y ** 2) < r ** 2 END FUNCTION in_circle @@ -12,24 +12,27 @@ PROGRAM monte_carlo REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi LOGICAL :: in_circle -! TEST CASE WRITE(*,*) in_circle(0.5d0, 0.5d0, 1d0) ! is true +! Calculate Pi from trigonometric functions as reference +pi = DACOS(-1.d0) +n = 100000 r = 1 -pi = DACOS(-1.d0) !!3.1415926535d0 -! TEST CASE WRITE(*,*) 'Pi = ', pi -n = 1000000 pos_x = 0 pos_y = 0 pi_count = 0 - DO i=0,n - CALL RANDOM_NUMBER(pos_x) - CALL RANDOM_NUMBER(pos_y) + +DO i=0,n + CALL RANDOM_NUMBER(pos_x) + CALL RANDOM_NUMBER(pos_y) - IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN - pi_count = pi_count + 1 - END IF - END DO + IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN + pi_count = pi_count + 1 + END IF +END DO + pi_est = 4 * pi_count / n pi_error = 100 * (abs(pi_est - pi)/pi) + WRITE(*,*) 'The pi estimate is: ', pi_est WRITE(*,*) 'Percent error is: ', pi_error, ' %' + END PROGRAM monte_carlo From 3896b3fcde0f6c8ac310040b1929fc2f8080df6c Mon Sep 17 00:00:00 2001 From: Patrik Tesarik Date: Tue, 4 Sep 2018 11:47:06 +0200 Subject: [PATCH 08/12] Applied the notes to the PR. Added correct precisions to constants. --- CONTRIBUTORS.md | 3 ++- book.json | 4 ++++ .../code/fortran/.gitignore | 1 - .../{monte_carlo_pi.f90 => monte_carlo.f90} | 16 ++++++++-------- .../code/fortran/montecarlo | Bin 17560 -> 0 bytes .../monte_carlo_integration.md | 4 ++++ 6 files changed, 18 insertions(+), 10 deletions(-) delete mode 100644 contents/monte_carlo_integration/code/fortran/.gitignore rename contents/monte_carlo_integration/code/fortran/{monte_carlo_pi.f90 => monte_carlo.f90} (79%) delete mode 100755 contents/monte_carlo_integration/code/fortran/montecarlo diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index e13735f7e..160be7452 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -61,4 +61,5 @@ Bendik Samseth Trashtalk
Cyrus Burt - +
+Patrik Tesarik diff --git a/book.json b/book.json index d13710307..a0c111415 100644 --- a/book.json +++ b/book.json @@ -135,6 +135,10 @@ { "lang": "nim", "name": "Nim" + }, + { + "lang": "f90", + "name": "Fortran" } ] } diff --git a/contents/monte_carlo_integration/code/fortran/.gitignore b/contents/monte_carlo_integration/code/fortran/.gitignore deleted file mode 100644 index 9299e9762..000000000 --- a/contents/monte_carlo_integration/code/fortran/.gitignore +++ /dev/null @@ -1 +0,0 @@ -montecarlo diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 similarity index 79% rename from contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 rename to contents/monte_carlo_integration/code/fortran/monte_carlo.f90 index ad7d1d15b..243b233d6 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo_pi.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 @@ -14,23 +14,23 @@ PROGRAM monte_carlo ! Calculate Pi from trigonometric functions as reference pi = DACOS(-1.d0) -n = 100000 -r = 1 -pos_x = 0 -pos_y = 0 -pi_count = 0 +n = 1000000 +r = 1d0 +pos_x = 0d0 +pos_y = 0d0 +pi_count = 0d0 DO i=0,n CALL RANDOM_NUMBER(pos_x) CALL RANDOM_NUMBER(pos_y) IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN - pi_count = pi_count + 1 + pi_count = pi_count + 1d0 END IF END DO -pi_est = 4 * pi_count / n -pi_error = 100 * (abs(pi_est - pi)/pi) +pi_est = 4d0 * pi_count / n +pi_error = 100d0 * (abs(pi_est - pi)/pi) WRITE(*,*) 'The pi estimate is: ', pi_est WRITE(*,*) 'Percent error is: ', pi_error, ' %' diff --git a/contents/monte_carlo_integration/code/fortran/montecarlo b/contents/monte_carlo_integration/code/fortran/montecarlo deleted file mode 100755 index d76a059c1061e4961798e235bc2e5ff486c49489..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17560 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 Hj1~U{-amT~ diff --git a/contents/monte_carlo_integration/monte_carlo_integration.md b/contents/monte_carlo_integration/monte_carlo_integration.md index a56b956ba..c3e05395d 100644 --- a/contents/monte_carlo_integration/monte_carlo_integration.md +++ b/contents/monte_carlo_integration/monte_carlo_integration.md @@ -69,6 +69,8 @@ each point is tested to see whether it's in the circle or not: [import:6-7, lang:"nim"](code/nim/monte_carlo.nim) {% sample lang="ruby" %} [import:1-4, lang:"ruby"](code/ruby/monte_carlo.rb) +{% sample lang="f90" %} +[import:1-6, lang:"fortran"](code/fortran/monte_carlo.f90) {% endmethod %} If it's in the circle, we increase an internal count by one, and in the end, @@ -137,6 +139,8 @@ Feel free to submit your version via pull request, and thanks for reading! [import, lang:"nim"](code/nim/monte_carlo.nim) {% sample lang="ruby" %} [import, lang:"ruby"](code/ruby/monte_carlo.rb) +{% sample lang="f90" %} +[import, lang:"fortran"](code/fortran/monte_carlo.f90) {% endmethod %} From 3e5b1e8e51c5a2bb41e9ce439573c2ea8d57150c Mon Sep 17 00:00:00 2001 From: depate Date: Wed, 5 Sep 2018 12:01:02 +0200 Subject: [PATCH 09/12] Added INTERFACE section to resolve raise of IMPLICIT error --- .../monte_carlo_integration/code/fortran/monte_carlo.f90 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 index 243b233d6..55fe769bf 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 @@ -8,9 +8,16 @@ END FUNCTION in_circle PROGRAM monte_carlo IMPLICIT NONE +INTERFACE + FUNCTION in_circle(pos_x, pos_y, r) + IMPLICIT NONE + REAL(16), INTENT(IN) :: pos_x, pos_y, r + LOGICAL :: in_circle +END FUNCTION in_circle +END INTERFACE + INTEGER :: i,n REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi -LOGICAL :: in_circle ! Calculate Pi from trigonometric functions as reference pi = DACOS(-1.d0) From 23125377e9796ab021d08e18c4fa9a50dbba82b2 Mon Sep 17 00:00:00 2001 From: depate Date: Sat, 22 Sep 2018 11:48:43 +0200 Subject: [PATCH 10/12] Change code according to review comments --- .../code/fortran/monte_carlo.f90 | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 index 55fe769bf..12e31a811 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 @@ -1,8 +1,10 @@ -FUNCTION in_circle(pos_x, pos_y, r) -IMPLICIT NONE -REAL(16), INTENT(IN) :: pos_x, pos_y, r -LOGICAL :: in_circle -in_circle = (pos_x ** 2 + pos_y ** 2) < r ** 2 +FUNCTION in_circle(pos_x, pos_y, r) + IMPLICIT NONE + REAL(16), INTENT(IN) :: pos_x, pos_y, r + LOGICAL :: in_circle + + in_circle = (pos_x ** 2 + pos_y ** 2) < r ** 2 + END FUNCTION in_circle PROGRAM monte_carlo @@ -10,36 +12,39 @@ PROGRAM monte_carlo INTERFACE FUNCTION in_circle(pos_x, pos_y, r) - IMPLICIT NONE - REAL(16), INTENT(IN) :: pos_x, pos_y, r - LOGICAL :: in_circle -END FUNCTION in_circle + IMPLICIT NONE + REAL(16), INTENT(IN) :: pos_x, pos_y, r + LOGICAL :: in_circle + END FUNCTION in_circle END INTERFACE INTEGER :: i,n REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi ! Calculate Pi from trigonometric functions as reference -pi = DACOS(-1.d0) -n = 1000000 -r = 1d0 -pos_x = 0d0 -pos_y = 0d0 +pi = DACOS(-1.d0) +n = 1000000 +r = 1d0 +pos_x = 0d0 +pos_y = 0d0 pi_count = 0d0 DO i=0,n + CALL RANDOM_NUMBER(pos_x) CALL RANDOM_NUMBER(pos_y) - + IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN + pi_count = pi_count + 1d0 + END IF END DO pi_est = 4d0 * pi_count / n pi_error = 100d0 * (abs(pi_est - pi)/pi) -WRITE(*,*) 'The pi estimate is: ', pi_est -WRITE(*,*) 'Percent error is: ', pi_error, ' %' +WRITE(*,'(A, F12.4)') 'The pi estimate is: ', pi_est +WRITE(*,'(A, F12.4, A)') 'Percent error is: ', pi_error, ' %' END PROGRAM monte_carlo From ba7a9900f8a6613fc28793c2eb83ade86f25938e Mon Sep 17 00:00:00 2001 From: depate Date: Sat, 22 Sep 2018 12:54:28 +0200 Subject: [PATCH 11/12] white spaces and spacing --- contents/monte_carlo_integration/code/fortran/monte_carlo.f90 | 3 ++- contents/monte_carlo_integration/monte_carlo_integration.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 index 12e31a811..e41e36708 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 @@ -8,6 +8,7 @@ FUNCTION in_circle(pos_x, pos_y, r) END FUNCTION in_circle PROGRAM monte_carlo + IMPLICIT NONE INTERFACE @@ -18,7 +19,7 @@ FUNCTION in_circle(pos_x, pos_y, r) END FUNCTION in_circle END INTERFACE -INTEGER :: i,n +INTEGER :: i,n REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi ! Calculate Pi from trigonometric functions as reference diff --git a/contents/monte_carlo_integration/monte_carlo_integration.md b/contents/monte_carlo_integration/monte_carlo_integration.md index ad35382c8..838409292 100644 --- a/contents/monte_carlo_integration/monte_carlo_integration.md +++ b/contents/monte_carlo_integration/monte_carlo_integration.md @@ -70,7 +70,7 @@ each point is tested to see whether it's in the circle or not: {% sample lang="ruby" %} [import:1-4, lang:"ruby"](code/ruby/monte_carlo.rb) {% sample lang="f90" %} -[import:1-6, lang:"fortran"](code/fortran/monte_carlo.f90) +[import:1-8, lang:"fortran"](code/fortran/monte_carlo.f90) {% endmethod %} If it's in the circle, we increase an internal count by one, and in the end, From 269fcc4d0abb82cc9ed4250263ede15fc1a9f299 Mon Sep 17 00:00:00 2001 From: Patrik Tesarik Date: Sun, 23 Sep 2018 02:56:01 +0200 Subject: [PATCH 12/12] indexed? --- .../code/fortran/monte_carlo.f90 | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 index e41e36708..6dd729378 100644 --- a/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 +++ b/contents/monte_carlo_integration/code/fortran/monte_carlo.f90 @@ -8,44 +8,44 @@ FUNCTION in_circle(pos_x, pos_y, r) END FUNCTION in_circle PROGRAM monte_carlo - -IMPLICIT NONE - -INTERFACE - FUNCTION in_circle(pos_x, pos_y, r) - IMPLICIT NONE - REAL(16), INTENT(IN) :: pos_x, pos_y, r - LOGICAL :: in_circle - END FUNCTION in_circle -END INTERFACE - -INTEGER :: i,n -REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi - -! Calculate Pi from trigonometric functions as reference -pi = DACOS(-1.d0) -n = 1000000 -r = 1d0 -pos_x = 0d0 -pos_y = 0d0 -pi_count = 0d0 - -DO i=0,n - - CALL RANDOM_NUMBER(pos_x) - CALL RANDOM_NUMBER(pos_y) - - IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN - - pi_count = pi_count + 1d0 - - END IF -END DO - -pi_est = 4d0 * pi_count / n -pi_error = 100d0 * (abs(pi_est - pi)/pi) - -WRITE(*,'(A, F12.4)') 'The pi estimate is: ', pi_est -WRITE(*,'(A, F12.4, A)') 'Percent error is: ', pi_error, ' %' - + + IMPLICIT NONE + + INTERFACE + FUNCTION in_circle(pos_x, pos_y, r) + IMPLICIT NONE + REAL(16), INTENT(IN) :: pos_x, pos_y, r + LOGICAL :: in_circle + END FUNCTION in_circle + END INTERFACE + + INTEGER :: i,n + REAL(16) :: pos_x,pos_y, r, pi_est, pi_count, pi_error, pi + + ! Calculate Pi from trigonometric functions as reference + pi = DACOS(-1.d0) + n = 1000000 + r = 1d0 + pos_x = 0d0 + pos_y = 0d0 + pi_count = 0d0 + + DO i=0,n + + CALL RANDOM_NUMBER(pos_x) + CALL RANDOM_NUMBER(pos_y) + + IF (in_circle(pos_x, pos_y, r) .EQV. .TRUE.) THEN + + pi_count = pi_count + 1d0 + + END IF + END DO + + pi_est = 4d0 * pi_count / n + pi_error = 100d0 * (abs(pi_est - pi)/pi) + + WRITE(*,'(A, F12.4)') 'The pi estimate is: ', pi_est + WRITE(*,'(A, F12.4, A)') 'Percent error is: ', pi_error, ' %' + END PROGRAM monte_carlo