text:
Engage All Stakeholders In Rebuilding Flood-Hit Kerala, Says UN Official
Press Trust of India | Updated: December 11, 2018 18:55 IST
Around 483 people and thousands of livestock were killed in Kerala floods in August. (File)
Katowice :
A top United Nations (UN) official has advised the state government to engage all stakeholders including the civil society and private sector in rebuilding Kerala after the devastating floods in August this year.
Assistant Secretary-General and Head of the New York Office of the United Nations Environment Programme (UNEP), Satya S Tripathi, said the government should not carry out the rebuilding work alone because no government can ever be able to deal with a problem of such massive proportions.
"So working with civil society, working with the people, working with the private sector, I think we need to bring everybody together, working with a common goal -- that is the only way to do it," Mr Tripathi told news agency PTI on the sidelines of the United Nations Climate Change Conference (COP 24) in Katowice, Poland.
Describing people of Kerala as "extremely enterprising", Mr Tripathi said: "Hats off to the people of Kerala. I can already see that the government is working with a lot of stakeholders to build a partnership that will help".
While 483 people and thousands of livestock were killed, the disaster in August this year incurred immense losses on the state's infrastructure, as many roads, bridges and thousands of houses were damaged/washed away.
Mr Tripathi said the biggest lesson he took away from the massive recovery coordination was the power of partnerships.
He also said it was not helpful to do the same things again because that would not help in the long run and every disaster gives you an opportunity to build better.
"So one needs to look at what was missing. Why did the floods happen to start with and how, that we have suffered all these deaths and devastation, could we do something differently and I think that is the message for all the tragedy and the immense havoc that was caused on people and property in Kerala," said Mr Tripathi.
"It also is a God-sent opportunity to look at the problem from a different perspective and see how we can do better this time. There are opportunities and lessons for all in this crisis," he said.
Asked about the arguments by certain experts that dams have played a role in increasing the proportions of Kerala flood disaster during July-August, Mr Tripathi said he leaves that to experts but maintained that the ecological risks to the eco-system overall is far more when you come up with big dams.
"Because while we see the visible benefits of providing water for irrigation and other things, the invisible damages are very huge both in terms of eco-system, species and the environment in general," said the top UN official.
"I think one needs to have a really holistic look at mega scale projects which may not necessarily serve the interest of the people and the planet in a longer term," Mr Tripathi said.
Published: December 11, 2018 18:55 IST
Indo-Asian News Service
Kerala floodsPoland summitUnited Nations official
Kerala has been hit by the worst floods in a 100 years. The Kerala Government estimates Rs 21,000 crore will be needed to rebuild the state. The funds are required to rebuild hundreds of flooded villages, thousands of damaged and destroyed homes and 10,000 kilometres of ravaged roads.
This Onam as Kerala struggles to rebuild after the most devastating floods in a century, NDTV has organised a special telethon to raise funds for Kerala. We have specific goals - to enable the rebuilding of villages in the worst-affected districts and provide immediate assistance in terms of rehabilitation and food kits to people in the worst affected areas . All donations will go directly to our partner NGO Plan India.
Our focus will be coverage that makes a difference, stories with a heart, standing by people and making their experience a shared one to effect change.
NDTV chose to report on this massive crisis with unwavering focus and commitment; having done that, now we look, as NDTV always does, to go beyond the news and make a difference to people's lives.


text:
Customers avoid green electricity
It doesn't save the world right away if you order renewable energies for your small household. But fewer and fewer Hessen are ordering green electricity. Sometimes it is even cheaper.
Dhe shock about the reactor accident in Fukushima in March 2011 had hit the Germans very hard. Churned by the news from Japan, everyone did what they could. The Chancellor, for example, made a 180-degree turnaround in her policy and, although the life of the German nuclear power plants had only just been extended, she pushed through the rapid phase-out of nuclear power. And the electricity customers? Shutting down power plants was not in their power. But they ordered a lot of electricity from renewable energies. Of those who opted for a new supply contract with the Verivox comparison portal in 2012, 76 percent chose green electricity.
But that is a long time ago. A few days ago, Verivox reported that the share of green electricity in the contracts concluded via this company's website last year was just 36 percent. After the values had been falling since 2013, they made another real rate down from 2016 to 2017, by 16 percentage points. The Hessians are exactly on average. In Berlin and Hamburg, the proportion was significantly higher at just over half last year. Lower Saxony is at the bottom of the table, for whatever reason. It may well be that people in the country are now reacting irritably to the word about green electricity in view of the fact that the landscape is being sparse with wind turbines. But the Brandenburgers, who were also heavily plagued by wind energy, were above average.
customercustomerselectric
Google banned 250+ dangerous apps in last 3 months; see list, uninstall now!
Google Chrome's emergency update fixes multiple security flaws
Top 10 apps that made most money in 2021
Android Collects Data even when Wi-Fi is Switched Off: Report
WhatsApp has fixed a bug that allowed hackers to take over a user's account
Now it comes to the extra fees
Android Zero Day Bug: Samsung, Xiaomi, Moto, Oppo and Pixel users must update framework
Uninstall these malicious Android apps to safeguard your data
100 billion euros less tax income than expected
Internet at 30: Inventor Tim Berners-Lee says World Wide Web must emerge from 'adolescence'

redpajama_set_name: RedPajamaCommonCrawl


Children's Advocacy Center for Denton County is committed to a multidisciplinary response to child sexual abuse. Established in 1997, the agency coordinates with law enforcement, child protective services, medical and mental health professionals to help children and their non-offending family members seek justice and find healing.
In an effort to protect Denton County's children from sexual abuse, the center offers free training and community outreach programs designed how to help the public recognize and react responsibly to child abuse.


Our Bolt Kit for the Ultimate Connection Kingpin Coupler includes all of the bolt hardware needed for the rectangular coupler block that connects directly to your Pin Box.
This listing DOES NOT include the Ultimate Connection Remote Latch Cable or Kingpin Coupler block. For the full assembly, see the Ultimate Connection Kingpin Coupler (part #3231).


The rare duck, a colourful creature native to East Asia who mysteriously appeared on the water last month, was like a zebra among horses, stealing the show with his ruffled auburn sideburns, purple breast and iridescent-looking crown. Hundreds flocked to the park with cameras around their necks to catch a glimpse of him, standing in lines that wrapped around the pond as if he were the star of a well-organized meet-and-greet.
So, would he survive a New York winter? Matthew Dodder, a California-based birdwatching instructor, said the duck would easily survive, as it is built to survive the cold winters of northern Japan.
Dodder said Mandarin ducks, which can sell between $150 (U.S.) and $300 per pair by breeders online, can thrive in a variety of habitats. He added that the Mandarin duck of Central Park is unlikely to migrate far south as other birds might.


Home Closed Competitions	CLOSED: Win £200 in Theatre Tokens!
We're giving away £200 worth of Theatre Tokens to spend on a show of your choice from plays, musicals, entertainment, opera to dance.
Theatre Tokens Gift Cards and eGifts are unique gift vouchers that can be used at more than 240 venues nationwide including all of London's West End. Plus, Theatre Tokens have no expiry date, so you'll have plenty of time to choose when and where to see a show.
You can also use them to exchange for tickets at TKTS, The Official London Theatre Ticket Booth, in Leicester Square where you'll also find many shows on offer at a discounted price.
Find your nearest venue where to use Theatre Tokens.
Prize: Win £200 in Theatre Tokens.
Closing Date: 09:00 on Tuesday 3rd April 2018. Entries received after Closing Date/Time will not be submitted into the draw.
CLOSED: WIN A £2,000 MOTHER AND DAUGHTER SHOPPING SPREE AT PHASE EIGHT!
Closed: Win Bake Off Bonanza prizes!


Using lean chicken breasts allows this chicken cacciatore to be done in less than 25 minutes, compared to the hour-long braise required by most cacciatore recipes. If you don't like your food so spicy, reduce the crushed red pepper to 1/4 tsp.
Combine 1 1/2 tsp EVOO, rosemary, garlic, salt, and black pepper in a small bowl, stirring with a whisk. Rub oil mixture evenly over chicken. Heat a large skillet over medium-high heat. Coat pan with cooking spray. Add chicken to pan; cook 2 minutes on each side (chicken will not be cooked through). Remove chicken from pan. Add remaining 1 tbsp EVOO to pan; swirl to coat. Add onion, bell peppers, and mushrooms; cook 4 minutes, stirring occasionally. Add wine; cook 1 minute or until liquid is reduced by half. Stir in 1/4 cup basil, crushed red pepper, and tomatoes; cook 1 minute. Return chicken to pan; turn to coat. Reduce heat; cover and simmer 15 minutes or until chicken is done. Sprinkle with remaining 1/4 cup basil. Serves 4 (serving size: 1 chicken breast half and about 1 cup sauce).
While the chicken is simmering, consider making Parmesan Polenta Rounds as a side. Directions follow.
Heat an ovenproof skillet over medium-high heat. Coat pan with cooking spray. Add polenta to pan; cook 2 minutes on each side or until golden. Sprinkle with Parmesan cheese and butter. Broil 2 to 3 minutes or until cheese melts. Serves 4 (serving size: 2 polenta rounds).


In a 21st-century nursing job market where competition is tough, effort is rewarded by outcome. For those nurses and healthcare professionals who sit on their laurels and don't do the work, career growth can be stunted. But for those willing to put in the sweat equity, the potential return on investment is high.
When you land a nursing job interview, one of your main tasks is to demonstrate that you're the ideal nurse candidate for the position. In the course of the conversation, your interviewer is likely to raise objections to why you may not be the best fit or why they might be hesitant to hire you. This is where the rubber hits the road, and you must do the work of overcoming their objections and convincing them that you're the person they want.
Whether you're a nursing educator, researcher, nurse entrepreneur, or nurse clinician, creating a nursing career legacy is both recommended and essential. No matter your place in the nursing ecosystem, leaving something behind that has meaning for you will suffuse your career with a sense of accomplishment.
Who's Driving The Bus of Your Nursing Career?
As a seasoned career coach working with nurses and other healthcare professionals, I often hear stories from my clients that are both heartbreaking and maddening. Nurses and nursing students go through so much in their careers, and there can be a lot of pain and struggle along the way. And when things go south and a nurse's career seems endangered, it can be a frightening and worrisome time.
No matter the cause of a nurse's career cookies appearing to crumble, there is almost always a way to get things back to the way they should be. I've seen so many varied scenarios of how a nursing career can take a bad turn, and I've seen many nurses turn it around and get back on top once again.
When most nurse job-seekers are in the market for a new nursing position, their job search process can be somewhat one-dimensional. From my perspective, a three-dimensional job search strategy is generally much more effective. And when it comes to career development, it's the same thing. One-dimensionsality breeds one-dimensional results -- why not try something more powerful?
Can You Return to Nursing After a Hiatus?
What Is Your Nursing "North Star"?
The New LinkedIn: Pay Attention, Nurses!


The only Gift Card that is all about karaoke!
Unlimited access to 32,000 karaoke songs, instantly !
Access to all of our apps for Windows, Mac, iPhone, iPad and Android.
Exclusive features (offline sync, pitch and tempo controls, smartphone remote...).
Customize your Gift Card with a personal message, and send it by email or print it for hand delivery.


Our Devices Terms and Conditions.
(a)These terms and conditions (hereafter "Terms") apply to all warranty requests by Mobile Broadband Limited (hereafter "Vodafone") which we offer on our homepage. (b) These Terms apply to any purchaser and owner (hereafter "Customer") of Vodafone devices seeking for receiving warranty services (hereafter "Services"), irrespective of whether you are a consumer, entrepreneur or businessman. (c) These Terms shall apply exclusively. Differing or contrary terms shall not apply except if expressly agreed upon in writing. (d) Services under these terms are available only to customers who have reached the age of majority. We explicitly reserve the right, not to perform our services in all countries.
Devices purchased from our Vodafone retail stores or outlets shall be subject to the warranty period provided by the manufacturers of the devices or otherwise referred to as the Original Equipment Manufacturers (OEMs). However, for the avoidance of doubt Vodafone does not warrantee the replacement or repair of the device if it is discovered that the customer is responsible for the damage that has occurred to the device.
The status of the device shall be established through a diagnosis process that shall be carried out at the Vodafone retails stores or outlets and by contacting any of our customer service champions on the numbers 717 which is toll free on MTN and ZAMTEL /718 for Corporate Customers or 211 378 555 on AIRTEL.
3. HOW IS MY WARRANTY VOIDED?
1. Physical damage and/or misuse or abuse, liquid damage, repairs and/or product modifications and alterations that have been executed by unauthorised third parties.
3. External causes such as from collision, fire, flooding, sand, dirt, windstorm, lightning, or earthquake.
4. Exposure to extreme weather conditions, Acts of God, theft, blown fuse, or improper use of any electrical source.
5. Computer or internet viruses, bugs, worms, Trojan Horses.
Use of non-compatible device products not recommended for use with the Device.
6. Normal wear and tear of the equipment.
7. Usage of Product other than its normal and customary manner.
9. Consumable parts such as batteries.
10. Spillage of food or liquid, corrosion, rust or incorrect voltage.
11. Modifying the exterior of the device by gluing, pasting or sticking 'decorative' images on the device can void the warranty if such attachments impact the interior mechanics of the device. Such attachments can also influence the strength of your network connectivity on the device.
12. The downloading of illegal software, alteration of the IMEI number on your device, whether it has been deleted, removed or made illegible, or if the internal data of your device doesn't comply with the proof of purchase.
13. Failing to properly follow the installation process and instructions for use, or if you use products or accessories that aren't compatible with your device – such as generic accessories and other contaminated auxiliary devices.
14. Vodafone Repairs acts in accordance with the manufacturer warranty. Therefore, you must make sure that you comply with the warranty requirements as they are outlined in your device manual/warranty card and or upon purchase of device at any of our retail stores or outlets.
There must be no physical damage on the product or its accessories, or any signs of neglect due to: physical abuse, liquid damage, screen scratches, dents or marks.
Please Note: Physical damage (including seemingly trivial surface scratches, marks, etc.) could result in an OBF claim being rejected. In the event that you experience a problem with your new device, you are encouraged to return it to the outlet you purchased the device from as soon as possible to reduce the risk of an OBF rejection due to physical damage.
i. Items must be returned within 7 (seven) calendar days from the date of purchase that is printed on the official invoice (proof of purchase).
ii. The original invoice (proof of purchase) as received at the point of sale must be supplied.
iii. All devices must be assessed by a Vodafone Repairs technician for any faults reported by the client before being exchanged. This assessment may take up to 7 (seven) calendar days. (Timeframe may be influenced by location, courier delays and/or public holidays). In the event that Vodafone is unable to complete the repairs of the device, the device shall be sent to the Original Equipment Manufacturers (OEMs) for further repairs, this shall attract an extra 7 days for the assessment period.
iv. Devices that meet the OBF criteria but are faulty due to software issues (incorrect version of software) and that can be resolved by way of a software upgrade are not considered OBF at this stage in the OBF resolution process.
– A software upgrade will be performed free of charge in an attempt to resolve the fault.
– Should this software upgrade fail to resolve the fault, and the device renders faulty within 7 (seven) days of the software upgrade and/or still within a 14 (fourteen) calendar day period from date of purchase/delivery, the device will be approved as an OBF. The consumer should retain their proof of receipt of the device when the device is issued back to them after the software upgrade, as this is the date that will be applied in terms of the additional 7 (seven) day window.
– The maximum of 14 (fourteen) calendar days OBF rejection with a software version update is therefore calculated in accordance with the time that the device is in the consumer's possession. Thus, providing a reasonable window to determine fault.
terms that qualify as OBF will only be swapped for the same make and model.
v. The original contents of the 'box', (device, original battery, original charger, original antenna, manual and any other accessories) must be complete and the packaging intact/in a good condition.
vii. The IMEI number on the box must match the IMEI number on the device.
viii. The physical condition of the device applies – as outlined above.
Vodafone makes no warranty of any kind, either expressed or implied, by fact or law, other than those expressly set forth in this agreement in the event that a customer returns a faulty device after the warranty period provided by the Original Equipment Manufacturers(OEMs).


When it comes to fixing electricity in your home, it's always best to pick the best that there is. This is usually as a precautionary measure to ensure you are safe from the disaster that accompanies faulty electricity connections. However, due to the increase in number of electricians in the industry, it has become quite hectic picking the ideal one. Therefore you need to take your time and conduct a thorough review before choosing on the most ideal. There are some primary aspects that you need to consider when selecting the right choice for you.
Well, the first thing to take into account when setting out to look for the right professional Pennsburg electrician is to verify their license and accreditation. Some companies profess to provide the very best service,however, lack the work permit or some other authorization from the relevant organization. Considering such individuals simply because they are less costly will set you in greater harm than good. Aside from that, there firm requires a license as well as insurance cover insuring them against any unfortunate event they face while on the course of the work. A firm without an insurance cover will put you under accountability in case of any injury that gets one of their own or your immediate neighbors. Hence, to be safe, don't hesitate to ask for the documents.
That aside, you also need to consider their reputation. Spoken word is usually the cheapest and effective way of finding out the favorite firm in the region. The choice for many people concerning certain firms will help you have a list of prospective electricians. In addition, it is also a good idea to surf through the internet and get the comments from previous clients of particular companies. The views and opinions expressed are usually genuine and verifiable. The comments reflect the quality of service of these specified electricians. The company that should be thought of is one which has earned the confidence of the people and has quite a number of positive remarks. Moreover, a firm that's reputable carries out its responsibilities faithfully to maintain the great connection it has with its clients.
Finally, it's also vital to consider the experience capacities of the Pennsburg home automation electricians. A firm that stayed operational for a longer time is believed to have gained the relevant skills needed to deal with the complications that may appear. Remember that electricity connections and repairs is a sophisticated discipline which needs specialists that are sure enough at their work. Other than that , Confirm their history of performance before hiring them. A firm that has a longer track record is normally regarded as the best one.


text:
/*
    -- MAGMA (version 1.5.0-beta3) --
       Univ. of Tennessee, Knoxville
       Univ. of California, Berkeley
       Univ. of Colorado, Denver
       @date July 2014

       @author Hartwig Anzt

       @generated from zcuilu.cpp normal z -> d, Fri Jul 18 17:34:29 2014
*/
// includes CUDA
#include <cuda_runtime_api.h>
#include <cublas.h>
#include <cusparse_v2.h>
#include <cuda_profiler_api.h>

// project includes
#include "common_magma.h"
#include "../include/magmasparse.h"

#include <assert.h>

#define PRECISION_d

/**
    Purpose
    -------

    Prepares the ILU preconditioner via the asynchronous ILU iteration.

    Arguments
    ---------

    @param
    A           magma_d_sparse_matrix
                input matrix A

    @param
    precond     magma_d_preconditioner*
                preconditioner parameters

    @ingroup magmasparse_dgepr
    ********************************************************************/

magma_int_t
magma_dcuilusetup( magma_d_sparse_matrix A, magma_d_preconditioner *precond ){

        // copy matrix into preconditioner parameter
        magma_d_sparse_matrix hA, hACSR;
        magma_d_mtransfer( A, &hA, A.memory_location, Magma_CPU );
        magma_d_mconvert( hA, &hACSR, hA.storage_type, Magma_CSR);
        magma_d_mtransfer(hACSR, &(precond->M), Magma_CPU, Magma_DEV);
        magma_d_mfree( &hA );
        magma_d_mfree( &hACSR );

            // CUSPARSE context //
            cusparseHandle_t cusparseHandle;
            cusparseStatus_t cusparseStatus;
            cusparseStatus = cusparseCreate(&cusparseHandle);
             if(cusparseStatus != 0)    printf("error in Handle.\n");

            cusparseMatDescr_t descrA;
            cusparseStatus = cusparseCreateMatDescr(&descrA);
             if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

            cusparseStatus =
            cusparseSetMatType(descrA,CUSPARSE_MATRIX_TYPE_GENERAL);
             if(cusparseStatus != 0)    printf("error in MatrType.\n");

            cusparseStatus =
            cusparseSetMatDiagType (descrA, CUSPARSE_DIAG_TYPE_NON_UNIT);
             if(cusparseStatus != 0)    printf("error in DiagType.\n");

            cusparseStatus =
            cusparseSetMatIndexBase(descrA,CUSPARSE_INDEX_BASE_ZERO);
             if(cusparseStatus != 0)    printf("error in IndexBase.\n");

            cusparseStatus =
            cusparseCreateSolveAnalysisInfo( &(precond->cuinfo) );
             if(cusparseStatus != 0)    printf("error in info.\n");

            // end CUSPARSE context //

            cusparseStatus =
            cusparseDcsrsv_analysis( cusparseHandle,
                        CUSPARSE_OPERATION_NON_TRANSPOSE,
                        precond->M.num_rows, precond->M.nnz, descrA,
                        precond->M.val, precond->M.row, precond->M.col,
                        precond->cuinfo);
             if(cusparseStatus != 0)    printf("error in analysis:%d\n", precond->cuinfo);

            cusparseStatus =
            cusparseDcsrilu0( cusparseHandle, CUSPARSE_OPERATION_NON_TRANSPOSE,
                              precond->M.num_rows, descrA,
                              precond->M.val,
                              precond->M.row,
                              precond->M.col,
                              precond->cuinfo);
             if(cusparseStatus != 0)    printf("error in ILU:%d\n", precond->cuinfo);

            cusparseStatus =
            cusparseDestroySolveAnalysisInfo( precond->cuinfo );
             if(cusparseStatus != 0)    printf("error in info-free.\n");

    cusparseDestroyMatDescr( descrA );

    magma_d_sparse_matrix hL, hU;

    magma_d_mtransfer( precond->M, &hA, Magma_DEV, Magma_CPU );

    hL.diagorder_type = Magma_UNITY;
    magma_d_mconvert( hA, &hL , Magma_CSR, Magma_CSRL );
    hU.diagorder_type = Magma_VALUE;
    magma_d_mconvert( hA, &hU , Magma_CSR, Magma_CSRU );
    magma_d_mtransfer( hL, &(precond->L), Magma_CPU, Magma_DEV );
    magma_d_mtransfer( hU, &(precond->U), Magma_CPU, Magma_DEV );

    cusparseMatDescr_t descrL;
    cusparseStatus = cusparseCreateMatDescr(&descrL);
     if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

    cusparseStatus =
    cusparseSetMatType(descrL,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
     if(cusparseStatus != 0)    printf("error in MatrType.\n");

    cusparseStatus =
    cusparseSetMatDiagType (descrL, CUSPARSE_DIAG_TYPE_UNIT);
     if(cusparseStatus != 0)    printf("error in DiagType.\n");

    cusparseStatus =
    cusparseSetMatIndexBase(descrL,CUSPARSE_INDEX_BASE_ZERO);
     if(cusparseStatus != 0)    printf("error in IndexBase.\n");

    cusparseStatus =
    cusparseSetMatFillMode(descrL,CUSPARSE_FILL_MODE_LOWER);
     if(cusparseStatus != 0)    printf("error in fillmode.\n");

    cusparseStatus = cusparseCreateSolveAnalysisInfo(&precond->cuinfoL);
     if(cusparseStatus != 0)    printf("error in info.\n");

    cusparseStatus =
    cusparseDcsrsv_analysis(cusparseHandle,
        CUSPARSE_OPERATION_NON_TRANSPOSE, precond->L.num_rows,
        precond->L.nnz, descrL,
        precond->L.val, precond->L.row, precond->L.col, precond->cuinfoL );
     if(cusparseStatus != 0)    printf("error in analysis.\n");

    cusparseDestroyMatDescr( descrL );

    cusparseMatDescr_t descrU;
    cusparseStatus = cusparseCreateMatDescr(&descrU);
     if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

    cusparseStatus =
    cusparseSetMatType(descrU,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
     if(cusparseStatus != 0)    printf("error in MatrType.\n");

    cusparseStatus =
    cusparseSetMatDiagType (descrU, CUSPARSE_DIAG_TYPE_NON_UNIT);
     if(cusparseStatus != 0)    printf("error in DiagType.\n");

    cusparseStatus =
    cusparseSetMatIndexBase(descrU,CUSPARSE_INDEX_BASE_ZERO);
     if(cusparseStatus != 0)    printf("error in IndexBase.\n");

    cusparseStatus =
    cusparseSetMatFillMode(descrU,CUSPARSE_FILL_MODE_UPPER);
     if(cusparseStatus != 0)    printf("error in fillmode.\n");

    cusparseStatus = cusparseCreateSolveAnalysisInfo(&precond->cuinfoU);
     if(cusparseStatus != 0)    printf("error in info.\n");

    cusparseStatus =
    cusparseDcsrsv_analysis(cusparseHandle,
        CUSPARSE_OPERATION_NON_TRANSPOSE, precond->U.num_rows,
        precond->U.nnz, descrU,
        precond->U.val, precond->U.row, precond->U.col, precond->cuinfoU );
     if(cusparseStatus != 0)    printf("error in analysis.\n");

    cusparseDestroyMatDescr( descrU );

    magma_d_mfree(&hA);
    magma_d_mfree(&hL);
    magma_d_mfree(&hU);

    cusparseDestroy( cusparseHandle );

    return MAGMA_SUCCESS;

}

/**
    Purpose
    -------

    Performs the left triangular solves using the ILU preconditioner.

    Arguments
    ---------

    @param
    b           magma_d_vector
                RHS

    @param
    x           magma_d_vector*
                vector to precondition

    @param
    precond     magma_d_preconditioner*
                preconditioner parameters

    @ingroup magmasparse_dgepr
    ********************************************************************/

magma_int_t
magma_dapplycuilu_l( magma_d_vector b, magma_d_vector *x,
                    magma_d_preconditioner *precond ){

            double one = MAGMA_D_MAKE( 1.0, 0.0);

            // CUSPARSE context //
            cusparseHandle_t cusparseHandle;
            cusparseStatus_t cusparseStatus;
            cusparseStatus = cusparseCreate(&cusparseHandle);
             if(cusparseStatus != 0)    printf("error in Handle.\n");

            cusparseMatDescr_t descrL;
            cusparseStatus = cusparseCreateMatDescr(&descrL);
             if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

            cusparseStatus =
            cusparseSetMatType(descrL,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
             if(cusparseStatus != 0)    printf("error in MatrType.\n");

            cusparseStatus =
            cusparseSetMatDiagType (descrL, CUSPARSE_DIAG_TYPE_UNIT);
             if(cusparseStatus != 0)    printf("error in DiagType.\n");

            cusparseStatus =
            cusparseSetMatIndexBase(descrL,CUSPARSE_INDEX_BASE_ZERO);
             if(cusparseStatus != 0)    printf("error in IndexBase.\n");

            cusparseStatus =
            cusparseSetMatFillMode(descrL,CUSPARSE_FILL_MODE_LOWER);
             if(cusparseStatus != 0)    printf("error in fillmode.\n");

            // end CUSPARSE context //

            cusparseStatus =
            cusparseDcsrsv_solve(   cusparseHandle,
                                    CUSPARSE_OPERATION_NON_TRANSPOSE,
                                    precond->L.num_rows, &one,
                                    descrL,
                                    precond->L.val,
                                    precond->L.row,
                                    precond->L.col,
                                    precond->cuinfoL,
                                    b.val,
                                    x->val );
             if(cusparseStatus != 0)   printf("error in L triangular solve.\n");

    cusparseDestroyMatDescr( descrL );
    cusparseDestroy( cusparseHandle );
    magma_device_sync();
    return MAGMA_SUCCESS;

}

/**
    Purpose
    -------

    Performs the right triangular solves using the ILU preconditioner.

    Arguments
    ---------

    @param
    b           magma_d_vector
                RHS

    @param
    x           magma_d_vector*
                vector to precondition

    @param
    precond     magma_d_preconditioner*
                preconditioner parameters

    @ingroup magmasparse_dgepr
    ********************************************************************/

magma_int_t
magma_dapplycuilu_r( magma_d_vector b, magma_d_vector *x,
                    magma_d_preconditioner *precond ){

            double one = MAGMA_D_MAKE( 1.0, 0.0);

            // CUSPARSE context //
            cusparseHandle_t cusparseHandle;
            cusparseStatus_t cusparseStatus;
            cusparseStatus = cusparseCreate(&cusparseHandle);
             if(cusparseStatus != 0)    printf("error in Handle.\n");

            cusparseMatDescr_t descrU;
            cusparseStatus = cusparseCreateMatDescr(&descrU);
             if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

            cusparseStatus =
            cusparseSetMatType(descrU,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
             if(cusparseStatus != 0)    printf("error in MatrType.\n");

            cusparseStatus =
            cusparseSetMatDiagType (descrU, CUSPARSE_DIAG_TYPE_NON_UNIT);
             if(cusparseStatus != 0)    printf("error in DiagType.\n");

            cusparseStatus =
            cusparseSetMatIndexBase(descrU,CUSPARSE_INDEX_BASE_ZERO);
             if(cusparseStatus != 0)    printf("error in IndexBase.\n");

            cusparseStatus =
            cusparseSetMatFillMode(descrU,CUSPARSE_FILL_MODE_UPPER);
             if(cusparseStatus != 0)    printf("error in fillmode.\n");

            // end CUSPARSE context //

            cusparseStatus =
            cusparseDcsrsv_solve(   cusparseHandle,
                                    CUSPARSE_OPERATION_NON_TRANSPOSE,
                                    precond->U.num_rows, &one,
                                    descrU,
                                    precond->U.val,
                                    precond->U.row,
                                    precond->U.col,
                                    precond->cuinfoU,
                                    b.val,
                                    x->val );
             if(cusparseStatus != 0)   printf("error in L triangular solve.\n");

    cusparseDestroyMatDescr( descrU );
    cusparseDestroy( cusparseHandle );
    magma_device_sync();
    return MAGMA_SUCCESS;

}

/**
    Purpose
    -------

    Prepares the IC preconditioner via the asynchronous ILU iteration.

    Arguments
    ---------

    @param
    A           magma_d_sparse_matrix
                input matrix A

    @param
    precond     magma_d_preconditioner*
                preconditioner parameters

    @ingroup magmasparse_dsypr
    ********************************************************************/

magma_int_t
magma_dcuiccsetup( magma_d_sparse_matrix A, magma_d_preconditioner *precond ){

    magma_d_sparse_matrix hA, hACSR, U, hD, hR, hAt;
    magma_d_mtransfer( A, &hA, A.memory_location, Magma_CPU );
    U.diagorder_type = Magma_VALUE;
    magma_d_mconvert( hA, &hACSR, hA.storage_type, Magma_CSR);
    magma_d_mconvert( hACSR, &U, Magma_CSR, Magma_CSRL);
    magma_d_mfree( &hACSR );

    magma_d_mtransfer(U, &(precond->M), Magma_CPU, Magma_DEV);

    // CUSPARSE context //
    cusparseHandle_t cusparseHandle;
    cusparseStatus_t cusparseStatus;
    cusparseStatus = cusparseCreate(&cusparseHandle);
     if(cusparseStatus != 0)    printf("error in Handle.\n");

    cusparseMatDescr_t descrA;
    cusparseStatus = cusparseCreateMatDescr(&descrA);
     if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

    cusparseStatus =
    cusparseSetMatType(descrA,CUSPARSE_MATRIX_TYPE_SYMMETRIC);
     if(cusparseStatus != 0)    printf("error in MatrType.\n");

    cusparseStatus =
    cusparseSetMatDiagType (descrA, CUSPARSE_DIAG_TYPE_NON_UNIT);
     if(cusparseStatus != 0)    printf("error in DiagType.\n");

    cusparseStatus =
    cusparseSetMatIndexBase(descrA,CUSPARSE_INDEX_BASE_ZERO);
     if(cusparseStatus != 0)    printf("error in IndexBase.\n");

    cusparseStatus =
    cusparseSetMatFillMode(descrA,CUSPARSE_FILL_MODE_LOWER);
     if(cusparseStatus != 0)    printf("error in fillmode.\n");

    cusparseStatus =
    cusparseCreateSolveAnalysisInfo( &(precond->cuinfo) );
     if(cusparseStatus != 0)    printf("error in info.\n");

    // end CUSPARSE context //

    cusparseStatus =
    cusparseDcsrsv_analysis( cusparseHandle,
                CUSPARSE_OPERATION_NON_TRANSPOSE,
                precond->M.num_rows, precond->M.nnz, descrA,
                precond->M.val, precond->M.row, precond->M.col,
                precond->cuinfo);
     if(cusparseStatus != 0)    printf("error in analysis IC.\n");

    cusparseStatus =
    cusparseDcsric0( cusparseHandle, CUSPARSE_OPERATION_NON_TRANSPOSE,
                      precond->M.num_rows, descrA,
                      precond->M.val,
                      precond->M.row,
                      precond->M.col,
                      precond->cuinfo);

    cusparseStatus =
    cusparseDestroySolveAnalysisInfo( precond->cuinfo );
     if(cusparseStatus != 0)    printf("error in info-free.\n");

     if(cusparseStatus != 0)    printf("error in ICC.\n");

    cusparseMatDescr_t descrL;
    cusparseStatus = cusparseCreateMatDescr(&descrL);
     if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

    cusparseStatus =
    cusparseSetMatType(descrL,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
     if(cusparseStatus != 0)    printf("error in MatrType.\n");

    cusparseStatus =
    cusparseSetMatDiagType (descrL, CUSPARSE_DIAG_TYPE_NON_UNIT);
     if(cusparseStatus != 0)    printf("error in DiagType.\n");

    cusparseStatus =
    cusparseSetMatIndexBase(descrL,CUSPARSE_INDEX_BASE_ZERO);
     if(cusparseStatus != 0)    printf("error in IndexBase.\n");

    cusparseStatus =
    cusparseSetMatFillMode(descrL,CUSPARSE_FILL_MODE_LOWER);
     if(cusparseStatus != 0)    printf("error in fillmode.\n");

    cusparseStatus = cusparseCreateSolveAnalysisInfo(&precond->cuinfoL);
     if(cusparseStatus != 0)    printf("error in info.\n");

    cusparseStatus =
    cusparseDcsrsv_analysis(cusparseHandle,
        CUSPARSE_OPERATION_NON_TRANSPOSE, precond->M.num_rows,
        precond->M.nnz, descrL,
        precond->M.val, precond->M.row, precond->M.col, precond->cuinfoL );
     if(cusparseStatus != 0)    printf("error in analysis L.\n");

    cusparseDestroyMatDescr( descrL );

    cusparseMatDescr_t descrU;
    cusparseStatus = cusparseCreateMatDescr(&descrU);
     if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

    cusparseStatus =
    cusparseSetMatType(descrU,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
     if(cusparseStatus != 0)    printf("error in MatrType.\n");

    cusparseStatus =
    cusparseSetMatDiagType (descrU, CUSPARSE_DIAG_TYPE_NON_UNIT);
     if(cusparseStatus != 0)    printf("error in DiagType.\n");

    cusparseStatus =
    cusparseSetMatIndexBase(descrU,CUSPARSE_INDEX_BASE_ZERO);
     if(cusparseStatus != 0)    printf("error in IndexBase.\n");

    cusparseStatus =
    cusparseSetMatFillMode(descrU,CUSPARSE_FILL_MODE_LOWER);
     if(cusparseStatus != 0)    printf("error in fillmode.\n");

    cusparseStatus = cusparseCreateSolveAnalysisInfo(&precond->cuinfoU);
     if(cusparseStatus != 0)    printf("error in info.\n");

    cusparseStatus =
    cusparseDcsrsv_analysis(cusparseHandle,
        CUSPARSE_OPERATION_TRANSPOSE, precond->M.num_rows,
        precond->M.nnz, descrU,
        precond->M.val, precond->M.row, precond->M.col, precond->cuinfoU );
     if(cusparseStatus != 0)    printf("error in analysis U.\n");

    cusparseDestroyMatDescr( descrL );
    cusparseDestroyMatDescr( descrA );
    cusparseDestroy( cusparseHandle );

    magma_d_mfree(&U);
    magma_d_mfree(&hA);

/*
    // to enable also the block-asynchronous iteration for the triangular solves
    magma_d_mtransfer( precond->M, &hA, Magma_DEV, Magma_CPU );
    hA.storage_type = Magma_CSR;

    magma_dcsrsplit( 256, hA, &hD, &hR );

    magma_d_mtransfer( hD, &precond->LD, Magma_CPU, Magma_DEV );
    magma_d_mtransfer( hR, &precond->L, Magma_CPU, Magma_DEV );

    magma_d_mfree(&hD);
    magma_d_mfree(&hR);

    magma_d_cucsrtranspose(   hA, &hAt );

    magma_dcsrsplit( 256, hAt, &hD, &hR );

    magma_d_mtransfer( hD, &precond->UD, Magma_CPU, Magma_DEV );
    magma_d_mtransfer( hR, &precond->U, Magma_CPU, Magma_DEV );

    magma_d_mfree(&hD);
    magma_d_mfree(&hR);
    magma_d_mfree(&hA);
    magma_d_mfree(&hAt);
*/

    return MAGMA_SUCCESS;

}

/**
    Purpose
    -------

    Performs the left triangular solves using the ICC preconditioner.

    Arguments
    ---------

    @param
    b           magma_d_vector
                RHS

    @param
    x           magma_d_vector*
                vector to precondition

    @param
    precond     magma_d_preconditioner*
                preconditioner parameters

    @ingroup magmasparse_dsypr
    ********************************************************************/

magma_int_t
magma_dapplycuicc_l( magma_d_vector b, magma_d_vector *x,
                    magma_d_preconditioner *precond ){

            double one = MAGMA_D_MAKE( 1.0, 0.0);

            // CUSPARSE context //
            cusparseHandle_t cusparseHandle;
            cusparseStatus_t cusparseStatus;
            cusparseStatus = cusparseCreate(&cusparseHandle);
             if(cusparseStatus != 0)    printf("error in Handle.\n");

            cusparseMatDescr_t descrL;
            cusparseStatus = cusparseCreateMatDescr(&descrL);
             if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

            cusparseStatus =
            cusparseSetMatType(descrL,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
             if(cusparseStatus != 0)    printf("error in MatrType.\n");

            cusparseStatus =
            cusparseSetMatDiagType (descrL, CUSPARSE_DIAG_TYPE_NON_UNIT);
             if(cusparseStatus != 0)    printf("error in DiagType.\n");

            cusparseStatus =
            cusparseSetMatIndexBase(descrL,CUSPARSE_INDEX_BASE_ZERO);
             if(cusparseStatus != 0)    printf("error in IndexBase.\n");

            cusparseStatus =
            cusparseSetMatFillMode(descrL,CUSPARSE_FILL_MODE_LOWER);
             if(cusparseStatus != 0)    printf("error in fillmode.\n");

            // end CUSPARSE context //

            cusparseStatus =
            cusparseDcsrsv_solve(   cusparseHandle,
                                    CUSPARSE_OPERATION_NON_TRANSPOSE,
                                    precond->M.num_rows, &one,
                                    descrL,
                                    precond->M.val,
                                    precond->M.row,
                                    precond->M.col,
                                    precond->cuinfoL,
                                    b.val,
                                    x->val );
             if(cusparseStatus != 0)   printf("error in L triangular solve:%d.\n", precond->cuinfoL );

    cusparseDestroyMatDescr( descrL );
    cusparseDestroy( cusparseHandle );
    magma_device_sync();
    return MAGMA_SUCCESS;

}

/**
    Purpose
    -------

    Performs the right triangular solves using the ICC preconditioner.

    Arguments
    ---------

    @param
    b           magma_d_vector
                RHS

    @param
    x           magma_d_vector*
                vector to precondition

    @param
    precond     magma_d_preconditioner*
                preconditioner parameters

    @ingroup magmasparse_dsypr
    ********************************************************************/

magma_int_t
magma_dapplycuicc_r( magma_d_vector b, magma_d_vector *x,
                    magma_d_preconditioner *precond ){

            double one = MAGMA_D_MAKE( 1.0, 0.0);

            // CUSPARSE context //
            cusparseHandle_t cusparseHandle;
            cusparseStatus_t cusparseStatus;
            cusparseStatus = cusparseCreate(&cusparseHandle);
             if(cusparseStatus != 0)    printf("error in Handle.\n");

            cusparseMatDescr_t descrU;
            cusparseStatus = cusparseCreateMatDescr(&descrU);
             if(cusparseStatus != 0)    printf("error in MatrDescr.\n");

            cusparseStatus =
            cusparseSetMatType(descrU,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
             if(cusparseStatus != 0)    printf("error in MatrType.\n");

            cusparseStatus =
            cusparseSetMatDiagType (descrU, CUSPARSE_DIAG_TYPE_NON_UNIT);
             if(cusparseStatus != 0)    printf("error in DiagType.\n");

            cusparseStatus =
            cusparseSetMatFillMode(descrU,CUSPARSE_FILL_MODE_LOWER);
             if(cusparseStatus != 0)    printf("error in fillmode.\n");

            cusparseStatus =
            cusparseSetMatIndexBase(descrU,CUSPARSE_INDEX_BASE_ZERO);
             if(cusparseStatus != 0)    printf("error in IndexBase.\n");

            // end CUSPARSE context //

            cusparseStatus =
            cusparseDcsrsv_solve(   cusparseHandle,
                                    CUSPARSE_OPERATION_TRANSPOSE,
                                    precond->M.num_rows, &one,
                                    descrU,
                                    precond->M.val,
                                    precond->M.row,
                                    precond->M.col,
                                    precond->cuinfoU,
                                    b.val,
                                    x->val );
             if(cusparseStatus != 0)   printf("error in U triangular solve:%d.\n", precond->cuinfoU );

    cusparseDestroyMatDescr( descrU );
    cusparseDestroy( cusparseHandle );
    magma_device_sync();
    return MAGMA_SUCCESS;

}

redpajama_set_name: RedPajamaGithub


The amazing Charm With Me Club Box finally featured My Disney Princess as a theme for October and it did not disappoint this Disnerd! Be sure to read through the end for a coupon code!
I have been waiting for Charm With Me to do a Disney themed box for a long time, and it finally arrived! The selected princess this month was….Cinderella!
The first charm they created was a dangle, featuring Cinderella's famous glass slipper. It's actually a blue tone on this charm with a really detailed bale. I was really happy with this one and it was probably my favorite of the ones included this month.
The second charm was a dangle tiara, which has Cinderella written around the bale. I have actually seen the Disney Pandora charms and they have a tiara that looks very similar. It's actually really nice to have a charm that looks so close to the authentic ones without the huge price difference.
Lastly, there was a carriage. This was probably my least favorite one. I was a bit disappointed in the blue stones and thought it looked fairly in-authentic. It wasn't at all what I'd hoped for but the other two definitely make up for it.
Finally, they also included two bonus charms! Two blue glass beads, which their silver insert being stamped 925 (meaning sterling silver), these two were definitely a real bonus! It's always nice to add some more color to my bracelet and these help a ton!
This month was a great month for Charm With Me. The pros definitely outweighed the con and I am so pleased that they finally went the Disney route!
If you'd like to sign up for Charm With Me Club, head to their website now! Their December box is currently on sale, with the theme, Star Wars: Rogue One! I'm willing to bet it's going to be an incredible box! And be sure to use coupon code BOOKELVES for 10% off your order!!