
    ՠ2g)                        d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ ddlmZ d	 Zd
 Zd Zd dlmZmZ d dlmZ d dlZd dlmZ d dlmZ d dlZd dlmZ d dlmZmZ d dlmZ d dlZd dlmZ d dlmZ d dlZd dlmZ d Zy)    N)render)settings)Projeto)Ambiente)combinations_with_replacement   )FANCOLETES_MODELOSc                     t        t        d       }d }t        d      }t        dd      D ]:  }t	        ||      D ])  }t        d |D              }|| z
  }|| k\  s ||k  s&|}|}+ < |rt        |      S dS )Nc                     | d   dz  S )Ncalor_total_resfriamento_btu_h+ެ? )xs    )C:\grfgraph\atual\cag\calculocag\views.py<lambda>z'determinar_fancoletes.<locals>.<lambda>   s    ;[9\_g9g    )keyinfr      c              3   ,   K   | ]  }|d    dz    yw)r   r   Nr   ).0aparelhos     r   	<genexpr>z(determinar_fancoletes.<locals>.<genexpr>   s      "nim]e8,L#MPX#Xims   u-   Não há combinação adequada de fancoletes.)sortedr	   floatranger   sumlist)carga_maxima_watts	aparelhosmelhor_combmenor_excessorcombcapacidade_totalexcessos           r   determinar_fancoletesr'      s    )/ghIK%LM1b\1)Q?D""nim"nn&);;G#55'M:Q" ' @  !,4`1``r   c                 <   t         j                  j                         }g }|D ]I  }t        j                  j	                  |      }g }|D ]  }	 t
        j                  j                  t        j                  d|j                         }t
        j                  j                  ||j                   d      }t
        j                  j                  |      sd}	d}
nHt        j                  |d      }d|j                  v r|d   j!                         }	t#        |	      }
nd	}	d}
|j'                  |j                  |	|
d        |j'                  |j                  |j(                  |d       L d|i}t+        | d|      S # t$        $ r}d
| }	d}
Y d }~sd }~ww xY w)N)projeto!arquivos_cargas_termicas/projeto__resultados_termicos.xlsx   Arquivo não encontradou   Não disponívelopenpyxlengine   Carga Térmica Total Ambiente   Coluna não encontradaErro ao processar arquivo: )nomecarga_termica_maxaparelho_detalhes)projeto_nome
projeto_id	ambienteslista_projetoszcalculocag/calculo_cag.html)r   objectsallr   filterospathjoinr   BASE_DIRnome_projetonome_ambienteexistspd
read_excelcolumnsmaxr'   	Exceptionappendidr   )requestprojetosr9   r)   r8   resumo_ambientesambientecaminho_basecaminho_arquivor4   r5   dfecontextos                 r   lista_projetos_aguarT      s   ""$HN$$++G+<	!H7!ww||H,=,=Abcjcwcwbx?yz"$'',,|@V@V?WWp=q"rww~~o6(A%(:%zJB6"**D,./N,O,S,S,U),ABS,T),D),>)
 ## ..%6%6% ' "2 	#00!**)
 	; H 	.H '8(CC'  7&A!$E!$6!7s   CF	F
FFc                    t         j                  j                  |      }t        j                  j                  |      }	 t        j
                  j                  t        j                  d|j                         }t        j
                  j                  ||j                   d      }t        j
                  j                  |      sd }d}nHt        j                  |d      }	d|	j                  v r|	d   j                         }t!        |      }nd }d}d
}d
}d
}t%        |t&              r|D ]  }||d   z  }||d   z  }||d   z  } ||||||d}t)        | d|      S # t"        $ r}
d }d	|
 }Y d }
~
`d }
~
ww xY w)NrJ   r*   r+   r,   r-   r.   r0   r1   r2   r   vazao_agua_m3_hr   calor_sensivel_btu_h)r)   rN   fancoletes_selecionadostotal_vazao_agua_m3_h$total_calor_total_resfriamento_btu_htotal_calor_sensivel_btu_hz#calculocag/detalhes_fancoletes.html)r   r:   getr   r=   r>   r?   r   r@   rA   rB   rC   rD   rE   rF   rG   r'   rH   
isinstancer   r   )rK   r7   ambiente_idr)   rN   rO   rP   r4   rY   rQ   rR   rZ   r[   r\   
fancoletesrS   s                   r   detalhes_fancoletesra   I   s   oo!!Z!0G##{#3HDww||H$5$59Z[b[o[oZp7qr'',,|8N8N7OOh5ijww~~o. $&?#zBB."**<$&'F$G$K$K$M!*?@Q*R'$(!*B' +,(!" )401J!Z0A%BB!0J?_4``0&*5K*LL& 2 #:!60T&@H '@(KK3  D $?s"CDs   CE! !	E;*E66E;)r   get_object_or_404)BytesIO)
sjFrictionc                 	   t        t        |      }d}d}d}d}d}d}d}	d }
g }d }d }d }| j                  d	k(  rt        | j                  j                  d
d            }t        | j                  j                  dd            }t        | j                  j                  dd            }t        |dz  dz  dz  d      }
||z   }g }g }g }g }g }t        j                  dd|	      }|D ]H  }t        j                  d|
z  dz  |t        j                  z  z        dz  }d|z  }||z  |dz  z  |z  }t        ||      }|||dz  z  z  |dz  dz  z  }||
dz  z  |z  d|z  z  dz  }d} |d| z  z   }!t        j                  |!dz  |dz  z
  dz  z  }"|"|dz  z  dz  dz  }#|#|z  }$||z  |z  }%|$|%z   }&|j                  |d|d|d||d|d|#d|$d|%d|&dd
       |j                  |       |j                  |       |j                  |       |j                  |&       |j                  |       K t        j                  |      }'||'   }(|(d    }t        j                  |      d}t        j                   d!"       t        j"                  d#d$d#       t        j$                  ||d%&       t        j&                  ||'   ||'   d'd()       t        j(                  d*       t        j*                  d+       t        j,                          t        j.                  d,       t        j"                  d#d$d       t        j$                  ||d-&       t        j&                  ||'   ||'   d'd()       t        j(                  d*       t        j*                  d.       t        j,                          t        j.                  d,       t        j"                  d#d$d$       t        j$                  ||d/&       t        j&                  ||'   ||'   d'd0)       t        j(                  d1       t        j*                  d2       t        j,                          t        j.                  d,       t1               })t        j2                  |)d34       |)j5                  d       |)j7                         }*|)j9                          t;        j<                  |*      j?                  d5      }|
|||||d6}+tA        | d7|+      S )8NrV   g=\r)M?gfffff(@   gffffff?i  g?
   POSTLp   Ls0   carga_termicar   gGz@g    s@   g      ?g      @   i  g333333?gQ3@K   gQ?gQ@i  i ʚ;z.2f)

velocidadediametroreynoldscoeficiente_atritoperda_cargapotencia_bomba	peso_tubocusto_instalacaocusto_operacaocusto_totalrr   )      )figsizer      zCurva da Bomba)labelredu   Ponto de Operação Selecionado)colorr   zVelocidade (m/s)u   Potência da Bomba (kW)TzPerda de CargazPerda de Carga (mca)zCusto TotalzPonto de Menor Custo Totalu   Diâmetro (mm)zCusto Total (R$)png)formatzutf-8)	vazao_max
resultadosdi_min	custo_mincurva_bomba_base64r7   zcalculocag/resultados_cag.html)!rb   r   methodr   rh   r]   roundnplinspacesqrtpird   rI   argminminpltfiguresubplotplotscatterxlabelylabellegendgridrc   savefigseekgetvalueclosebase64	b64encodedecoder   ),rK   r7   r)      μ   ρ	custo_acokwh	horas_usorendimento_bombanvr   r   r   r   r   ri   rk   rm   Ltvelocidades	potenciasperdas_cargacustos_totais	diametrosvivdirR   RefPcP_besp_tdeA_stPef_custoinstf_custo_bombarz   indice_melhor_resultadomelhor_resultadobuffer	image_pngrS   s,                                               r   calcular_cagr      s   J7G 
B	BI
CI	BIJFI~~7<<##D"-.7<<##D"-.gll..BC MD0Z@DH!L	"W 		 [[c2&A!i-$.1ruu9=>EBr	Aq&BI&",B2q!ArR$Y'(AFh,?@BT)*R/28H3HIjYCEa%iBEEbAga/145D"t)$t+e3By.K#I	1M%5K!"3!#h!#h&'"$S%(I "3x'23&7%23$7"-c!2  q!S!#  -R E J #%))M":%&=>!*-vvm,S1	 	

7#Aq!i/?@K 78)D[:\di  rS  	T

%&

,-

Aq!l2BCK 78,G^:_gl  uV  	W

%&

)*

Aq!M?I56F]8^fk  tP  	Q

#$

%&

F5)AOO%	#--i8??H  0 H ';XFFr   )r=   pandasrD   django.shortcutsr   django.confr   projeto.modelsr   ctermica.modelsr   	itertoolsr   r`   r	   r'   rT   ra   rb   numpyr   matplotlib.pyplotpyplotr   iorc   r   	colebrookrd   r   r   r   r   <module>r      sd    	  #   " $ 3 *a *D\,L\ 7 "       6 "      zGr   